- Named variables (
let
) - Recursion
- Lazy evaluation
- Functions
- Closures
- Library functions: File IO
- Lists / Sequences
- Library functions: Lists/Sequences
- Stage 1: Developing abstract syntax tree and parser for your language + one sample program
- Stage 2: Developing interpreter/compiler for your language
- Stage 3: Writing sample programs and documentation
All math and logic operations must be written in this way:
('operator' 'operand_1' 'operand_2')
.
For example:
(+ 2 2)
(or true false)
Variable must be declared with following syntax:
(let 'varName' 'value' 'visible code area')
For example:
(let cost 150.25 (cost))
P.S. in this case we're declaring variable cost with value 150.25 and permanently print it from the visible code area.
Variable must be declared with following syntax:
(defun 'funcName' ('varName_1' 'varName_2' 'varName_3'...) ('body of function') 'visible code area')
P.S. obviously you can use multiple variables, so just separate them with space.
There are two types of collection: List and Sequence.
So, list must be declared in the value section of let
with following syntax:
(list 'value_1' 'value_2' 'value_3'...)
For example:
(let myList (list 1 2 3) mylist)
P.S. in this case we're declaring list and permanently print it from the visible code area.
The syntax is similar to List, but has two features of declaring:
First one:
(let mySeq (seq 'left' .. 'right'))
Second one:
(let mySeq (seq 'left' .. 'step' .. 'right'))
P.S. the first case is a special case of the second, but only with 'step' = 1
Instead of List, Sequence holds in memory only triple parameters mentioned above. It uses lazy evaluation principle and starts enumerate values in selected range only when it's neccessary.
There are several supported functions starting with keywords list
or seq
:
- head
- tail
- item
Syntax is here:
list/seq head/tail 'collectionName'
list/seq item 'collectionIndex' 'collectionName'
P. S. symbol '/' means 'or', so choose one of them.
There are several supported functions starting with keywords file
:
- create
- read
- write
Syntax is here:
file create 'absolutePath'
— create file in selected directory with requested name (must be written in the end).file read 'absolutePath'
— read file and return string.file write 'absolutePath' 'textInfo'
— append text to the file.
P.S. all library functions work with .txt format.
(
(let x (
(let y 5 (+ 5 y))
)
(let y (+ x 3)
(* x y)
)
)
)
(
(defun fib (N)
(
(if (or (= N 0) (= N 1))
1
(
(let f1 (fib (- N 1))
(let f2 (fib (- N 2))
(+ f1 f2)
)
)
)
)
)
fib 7
)
)
The folder, containing samples for each feature.
Name | Role in the project |
---|---|
Levon Khorasandzhian | The creator of interpreter & tester of interpreter & editor of documentation |
Nikita Biryulin | The creator of parser & tester of parser & assistant with interpreter |
Vitaliy Cherkasskiy | The creator of interpreter & tester of interpreter & GitHub feature assistant |