https://github.com/shubham1chawla/js-interpreter
Rust-based JavaScript Parser & Tree-Walk Interpreter
https://github.com/shubham1chawla/js-interpreter
interpreter javascript parser
Last synced: about 2 months ago
JSON representation
Rust-based JavaScript Parser & Tree-Walk Interpreter
- Host: GitHub
- URL: https://github.com/shubham1chawla/js-interpreter
- Owner: shubham1chawla
- Created: 2024-11-23T23:02:41.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-01-18T04:56:24.000Z (over 1 year ago)
- Last Synced: 2025-03-24T18:49:40.748Z (over 1 year ago)
- Topics: interpreter, javascript, parser
- Language: Rust
- Homepage:
- Size: 188 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Javascript Parser & Tree-walk Interpreter
This repository contains code to parse and interpret Javascript (JS) files, following a tutorial by [Dmitry Soshnikov](http://dmitrysoshnikov.com/).
## Grammar
The following snippets highlight the grammar production rules based on [Backus–Naur form](https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form).
```
Program
: StatementList
;
StatementList
: Statement
| StatementList Statement
;
Statement
: IterationStatement
| FunctionDeclaration
| ReturnKeyword
| EmptyStatement
| BlockStatement
| VariableStatement
| IfStatement
| ClassDeclaration
| ExpressionStatement
;
IterationStatement
: WhileStatement
| DoWhileStatement
| ForStatement
;
WhileStatement
: 'while' '(' Expression ')' Statement
;
DoWhileStatement
: 'do' Statement '(' Expression ')' ';'
;
ForStatement
: 'for' '(' OptForStatementInit ';' OptExpression ';' OptExpression ')' Statement
;
ForStatementInit
: VariableStatementInit
| Expression
;
FunctionDeclaration
: 'function' Identifier '(' OptFormalParameterList ')' BlockStatement
;
FormalParameterList
: Identifier
| FormalParameterList ',' Identifier
;
ReturnStatement
: 'return' OptExpression ';'
;
EmptyStatement
: ';'
;
BlockStatement
: '{' OptStatementList '}'
;
VariableStatement
: VariableStatementInit ';'
;
VariableStatementInit
: 'let' VariableDeclarationList
;
VariableDeclarationList
: VariableDeclaration
| VariableDeclarationList ',' VariableDeclaration
;
VariableDeclaration
: Identifier OptVariableInitializer
;
VariableInitializer
: SIMPLE_ASSIGNMENT_OPERATOR AssignmentExpression
;
IfStatement
: 'if' '(' Expression ')' Statement
| 'if' '(' Expression ')' Statement 'else' Statement
;
ClassDeclaration
: 'class' Identifier OptClassExtends ClassBody
;
ClassExtends
: 'extends' Identifier
;
ClassBody
: '{' OptClassStatementList '}'
;
ClassStatementList
: ClassStatement
| ClassStatementList ClassStatement
;
ClassStatement
: ConstructorDefinition
| GetterDefinition
| SetterDefinition
| MethodDefinition
| PropertyDefinition
;
ConstructorDefinition
: 'constructor' '(' OptFormalParameterList ')' BlockStatement
;
GetterDefinition
: 'get' Identifier '(' ')' BlockStatement
;
SetterDefinition
: 'set' Identifier '(' Identifier ')' BlockStatement
;
MethodDefinition
: Identifier '(' OptFormalParameterList ')' BlockStatement
;
PropertyDefinition
: Identifier OptPropertyInitializer ';'
;
PropertyInitializer
: SIMPLE_ASSIGNMENT_OPERATOR AssignmentExpression
;
ExpressionStatement
: Expression ';'
;
Expression
: AssignmentExpression
;
AssignmentExpression
: LogicalOrExpression
| LeftHandSideExpression ASSIGNMENT_OPERATOR AssignmentExpression
;
LogicalOrExpression
: LogicalAndExpression
| LogicalAndExpression '||' LogicalAndExpression
;
LogicalAndExpression
: EqualityExpression
| EqualityExpression '&&' EqualityExpression
;
EqualityExpression
: RelationalExpression EQUALITY_OPERATOR EqualityExpression
| RelationalExpression
;
RelationalExpression
: AdditiveExpression
| AdditiveExpression RELATIONAL_OPERATOR RelationalExpression
;
AdditiveExpression
: MultiplicativeExpression
| AdditiveExpression ADDITIVE_OPERATOR MultiplicativeExpression
;
MultiplicativeExpression
: UnaryExpression
| MultiplicativeExpression MULTIPLICATIVE_OPERATOR UnaryExpression
;
UnaryExpression
: LeftHandSideExpression
| ADDITIVE_OPERATOR UnaryExpression
| LOGICAL_NOT UnaryExpression
;
LeftHandSideExpression
: CallMemberExpression
;
CallMemberExpression
: MemberExpression
| CallExpression
;
CallExpression
: Callee Arguments
;
Callee
: MemberExpression
| CallExpression
;
Arguments
: '(' OptArgumentList ')'
;
ArgumentList
: AssignmentExpression
| ArgumentList ',' AssignmentExpression
;
MemberExpression
: PrimaryExpression
| MemberExpression '.' Identifier
| MemberExpression '[' Expression ']'
;
PrimaryExpression
: ParanthesizedExpression
| FunctionExpression
| NewExpression
| Literal
| Identifier
;
ParanthesizedExpression
: '(' Expression ')'
;
FunctionExpression
: 'function' OptIdentifier '(' OptFormalParameterList ')' BlockStatement
;
NewExpression
: 'new' MemberExpression Arguments
;
Literal
: NumericLiteral
| StringLiteral
| BooleanLiteral
| NullLiteral
| ThisLiteral
| SuperLiteral
;
NumericLiteral
: NUMBER
;
StringLiteral
: STRING
;
BooleanLiteral
: 'true'
| 'false'
;
NullLiteral
: 'null'
;
ThisLiteral
: 'this'
;
SuperLiteral
: 'super'
;
Identifier
: IDENTIFIER
;
```