PCASTL
| PCASTL | |
|---|---|
| Paradigm | imperative, reflective |
| Designed by | Philippe Choquette |
| Developer | Philippe Choquette |
| First appeared | 2008 |
| Stable release | 3.5
/ March 31, 2018 |
| OS | Cross-platform |
| License | GNU Lesser General Public License |
| Website | www |
| Influenced by | |
| C, R | |
The PCASTL (an acronym for by Parent and Childset Accessible Syntax Tree Language) is an interpreted high-level programming language. It was created in 2008 by Philippe Choquette.[1] The PCASTL is designed to ease the writing of self-modifying code. The language has reserved words parent and childset to access the nodes of the syntax tree of the currently written code.[2]
Hello world
[edit | edit source]The "Hello world program" is quite simple:
"Hello, world!"
or
print("Hello, world!")
will do the same.
Syntax
[edit | edit source]The syntax of PCASTL is derived from programming languages C and R. The source of R version 2.5.1 has been studied to write the grammar and the lexer used in the PCASTL interpreter.
Influences
[edit | edit source]Like in R, statements can, but do not have to, be separated by semicolons.[3] Like in R, a variable can change type in a session. Like in C and R, PCASTL uses balanced brackets ({ and }) to make blocks.
Operators found in PCASTL have the same precedence and associativity as their counterparts in C.[2][4] for loops are defined like in C. ++ and -- operators are used like in C to increment or decrement a variable before or after it is used in its expression.
An example of PCASTL using the for reserved word and the ++ operator:
for (i = 1; i < 4; i++) print(i)
Functions and comments in PCASTL are defined like in R:
# function definition (comment)
a = function()
{
print("Hello, world!")
}
# function call
a()
parent and childset reserved words
[edit | edit source]Those reserved words can only be written lowercase and will not be recognized otherwise. The parent reserved word gives a reference to the parent node in the syntax tree of the code where the word is placed. In the following code, the parent node is the operator =.
a = parent
The variable "a" will hold a reference to the = node. The following code shows how to get references to the two child nodes of the operator = with the childset reserved word.
a.childset[0] a.childset[1]
To display the value of "a", some ways are given in this example:
a a.childset[0].parent a.childset[1].parent a.childset[0].parent.childset[0].parent # and so on...
In the following code: we assign a code segment to the right child of the = node, we execute the = node a second time and we call the newly defined function.
a.childset[1] = `function() print("hello")'
execute(a)
a()
See also
[edit | edit source]Lua error in mw.title.lua at line 392: bad argument #2 to 'title.new' (unrecognized namespace name 'Portal').
References
[edit | edit source]- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ a b Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).