A step-bu-step Tiny BASIC interpreter. Starting with lexer - educational and open for contributions!
- Lexical Analyzer (Lexer)
- Syntax Analyzer (Parser)
- Recursive descent parsing
- Abstract Syntax Tree (AST)
- Interpreter
- Expression evaluation
- Variable assignment (LET)
- Output (PRINT)
- Conditional statements (IF-THEN)
- Loops (FOR-NEXT)
- User input (INPUT)
10 LET A = 5 + 2 * (2 * 1) * (5 * 1)
20 LET B = 3 * 3 + 2
30 PRINT A
40 PRINT BToken: Number -> '10'
Token: Keyword -> 'LET'
Token: Identifier -> 'A'
Token: Equal -> '='
Token: Number -> '5'
Token: Plus -> '+'
Token: Number -> '2'
Token: Mult -> '*'
Token: LeftParenthesis -> '('
Token: Number -> '2'
Token: Mult -> '*'
Token: Number -> '1'
Token: RightParenthesis -> ')'
Token: Mult -> '*'
Token: LeftParenthesis -> '('
Token: Number -> '5'
Token: Mult -> '*'
Token: Number -> '1'
Token: RightParenthesis -> ')'
Token: Number -> '20'
Token: Keyword -> 'PRINT'
Token: Identifier -> 'A'LetStmt: A=
BinaryExpr: +
Literal: 5
BinaryExpr: *
BinaryExpr: *
Literal: 2
BinaryExpr: *
Literal: 2
Literal: 1
BinaryExpr: *
Literal: 5
Literal: 1
PrintStmt:
Variable: AExecute:
25
11
End of program.git clone https://github.com/varvarian1/Tiny-BASIC.git
cd Tiny-BASIC
mkdir build && cd build
cmake ..
cmake --build .
cd ../output
./basic ../examples/test.bas