{"id":24794945,"url":"https://github.com/shubham1chawla/js-interpreter","last_synced_at":"2026-05-11T16:02:05.539Z","repository":{"id":264394206,"uuid":"893245835","full_name":"shubham1chawla/js-interpreter","owner":"shubham1chawla","description":"Rust-based JavaScript Parser \u0026 Tree-Walk Interpreter","archived":false,"fork":false,"pushed_at":"2025-01-18T04:56:24.000Z","size":192,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-24T18:49:40.748Z","etag":null,"topics":["interpreter","javascript","parser"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shubham1chawla.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-23T23:02:41.000Z","updated_at":"2025-01-18T04:56:26.000Z","dependencies_parsed_at":"2024-11-24T00:19:24.694Z","dependency_job_id":"3d542266-871c-4b07-aa90-6d5b5b1b4fc7","html_url":"https://github.com/shubham1chawla/js-interpreter","commit_stats":null,"previous_names":["shubham1chawla/js-parser","shubham1chawla/js-interpreter"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/shubham1chawla/js-interpreter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shubham1chawla%2Fjs-interpreter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shubham1chawla%2Fjs-interpreter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shubham1chawla%2Fjs-interpreter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shubham1chawla%2Fjs-interpreter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shubham1chawla","download_url":"https://codeload.github.com/shubham1chawla/js-interpreter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shubham1chawla%2Fjs-interpreter/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263715242,"owners_count":23500241,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["interpreter","javascript","parser"],"created_at":"2025-01-29T23:19:18.146Z","updated_at":"2026-05-11T16:02:00.490Z","avatar_url":"https://github.com/shubham1chawla.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Javascript Parser \u0026 Tree-walk Interpreter\n\nThis repository contains code to parse and interpret Javascript (JS) files, following a tutorial by [Dmitry Soshnikov](http://dmitrysoshnikov.com/).\n\n## Grammar\n\nThe following snippets highlight the grammar production rules based on [Backus–Naur form](https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form).\n\n```\nProgram\n    : StatementList\n    ;\n\nStatementList\n    : Statement\n    | StatementList Statement\n    ;\n\nStatement\n    : IterationStatement\n    | FunctionDeclaration\n    | ReturnKeyword\n    | EmptyStatement\n    | BlockStatement\n    | VariableStatement\n    | IfStatement\n    | ClassDeclaration\n    | ExpressionStatement\n    ;\n\nIterationStatement\n    : WhileStatement\n    | DoWhileStatement\n    | ForStatement\n    ;\n\nWhileStatement\n    : 'while' '(' Expression ')' Statement\n    ;\n\nDoWhileStatement\n    : 'do' Statement '(' Expression ')' ';'\n    ;\n\nForStatement\n    : 'for' '(' OptForStatementInit ';' OptExpression ';' OptExpression ')' Statement\n    ;\n\nForStatementInit\n    : VariableStatementInit\n    | Expression\n    ;\n\nFunctionDeclaration\n    : 'function' Identifier '(' OptFormalParameterList ')' BlockStatement\n    ;\n\nFormalParameterList\n    : Identifier\n    | FormalParameterList ',' Identifier\n    ;\n\nReturnStatement\n    : 'return' OptExpression ';'\n    ;\n\nEmptyStatement\n    : ';'\n    ;\n\nBlockStatement\n    : '{' OptStatementList '}'\n    ;\n\nVariableStatement\n    : VariableStatementInit ';'\n    ;\n\nVariableStatementInit\n    : 'let' VariableDeclarationList\n    ;\n\nVariableDeclarationList\n    : VariableDeclaration\n    | VariableDeclarationList ',' VariableDeclaration\n    ;\n\nVariableDeclaration\n    : Identifier OptVariableInitializer\n    ;\n\nVariableInitializer\n    : SIMPLE_ASSIGNMENT_OPERATOR AssignmentExpression\n    ;\n\nIfStatement\n    : 'if' '(' Expression ')' Statement\n    | 'if' '(' Expression ')' Statement 'else' Statement\n    ;\n\nClassDeclaration\n    : 'class' Identifier OptClassExtends ClassBody\n    ;\n\nClassExtends\n    : 'extends' Identifier\n    ;\n\nClassBody\n    : '{' OptClassStatementList '}'\n    ;\n\nClassStatementList\n    : ClassStatement\n    | ClassStatementList ClassStatement\n    ;\n\nClassStatement\n    : ConstructorDefinition\n    | GetterDefinition\n    | SetterDefinition\n    | MethodDefinition\n    | PropertyDefinition\n    ;\n\nConstructorDefinition\n    : 'constructor' '(' OptFormalParameterList ')' BlockStatement\n    ;\n\nGetterDefinition\n    : 'get' Identifier '(' ')' BlockStatement\n    ;\n\nSetterDefinition\n    : 'set' Identifier '(' Identifier ')' BlockStatement \n    ;\n\nMethodDefinition\n    : Identifier '(' OptFormalParameterList ')' BlockStatement\n    ;\n\nPropertyDefinition\n    : Identifier OptPropertyInitializer ';'\n    ;\n\nPropertyInitializer\n    : SIMPLE_ASSIGNMENT_OPERATOR AssignmentExpression\n    ;\n\nExpressionStatement\n    : Expression ';'\n    ;\n\nExpression\n    : AssignmentExpression\n    ;\n\nAssignmentExpression\n    : LogicalOrExpression\n    | LeftHandSideExpression ASSIGNMENT_OPERATOR AssignmentExpression\n    ;\n\nLogicalOrExpression\n    : LogicalAndExpression\n    | LogicalAndExpression '||' LogicalAndExpression\n    ;\n\nLogicalAndExpression\n    : EqualityExpression\n    | EqualityExpression '\u0026\u0026' EqualityExpression\n    ;\n\nEqualityExpression\n    : RelationalExpression EQUALITY_OPERATOR EqualityExpression\n    | RelationalExpression\n    ;\n\nRelationalExpression\n    : AdditiveExpression\n    | AdditiveExpression RELATIONAL_OPERATOR RelationalExpression\n    ;\n\nAdditiveExpression\n    : MultiplicativeExpression\n    | AdditiveExpression ADDITIVE_OPERATOR MultiplicativeExpression\n    ;\n\nMultiplicativeExpression\n    : UnaryExpression\n    | MultiplicativeExpression MULTIPLICATIVE_OPERATOR UnaryExpression\n    ;\n\nUnaryExpression\n    : LeftHandSideExpression\n    | ADDITIVE_OPERATOR UnaryExpression\n    | LOGICAL_NOT UnaryExpression\n    ;\n\nLeftHandSideExpression\n    : CallMemberExpression\n    ;\n\nCallMemberExpression\n    : MemberExpression\n    | CallExpression\n    ;\n\nCallExpression\n    : Callee Arguments\n    ;\n\nCallee\n    : MemberExpression\n    | CallExpression\n    ;\n\nArguments\n    : '(' OptArgumentList ')'\n    ;\n\nArgumentList\n    : AssignmentExpression\n    | ArgumentList ',' AssignmentExpression\n    ;\n\nMemberExpression\n    : PrimaryExpression\n    | MemberExpression '.' Identifier\n    | MemberExpression '[' Expression ']'\n    ;\n\nPrimaryExpression\n    : ParanthesizedExpression\n    | FunctionExpression\n    | NewExpression\n    | Literal\n    | Identifier\n    ;\n\nParanthesizedExpression\n    : '(' Expression ')'\n    ;\n\nFunctionExpression\n    : 'function' OptIdentifier '(' OptFormalParameterList ')' BlockStatement\n    ;\n\nNewExpression\n    : 'new' MemberExpression Arguments\n    ;\n\nLiteral\n    : NumericLiteral\n    | StringLiteral\n    | BooleanLiteral\n    | NullLiteral\n    | ThisLiteral\n    | SuperLiteral\n    ;\n\nNumericLiteral\n    : NUMBER\n    ;\n\nStringLiteral\n    : STRING\n    ;\n\nBooleanLiteral\n    : 'true'\n    | 'false'\n    ;\n\nNullLiteral\n    : 'null'\n    ;\n\nThisLiteral\n    : 'this'\n    ;\n\nSuperLiteral\n    : 'super'\n    ;\n\nIdentifier\n    : IDENTIFIER\n    ;\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshubham1chawla%2Fjs-interpreter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshubham1chawla%2Fjs-interpreter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshubham1chawla%2Fjs-interpreter/lists"}