Skip to content

A typescript & Node.js implemented compiler front-end project includes CLR parser generator.

Notifications You must be signed in to change notification settings

AcrylicShrimp/testlang

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

testlang

A typescript & Node.js implemented compiler front-end project.

This project has been ported to Rust due to performance issues. If you have planned to run it, please consider use new repository instead.

Purpose

This project was began for the complete implementation of the front-end of compilers.

Structure

  • src/rule.ts: Parses a rule file and generates a CLR parsing table.
  • src/parser.ts: Parses tokens from a lexer and generates an AST. This parser is driven by a parsing table.
  • src/lexer.ts: Supplies tokens to a parser by reading given input.

Rule file

The rule.ts file requires a valid rule file to generate a parsing table. This rule file is similar to the BNF notation, but not supports alternations(| symbol).

Basic form

It is super easy to define a new non-terminal. Don't forget to add an @ sign as a first letter for each non-terminal.

non-terminal-name: terminal @non-terminal terminal @non-terminal ... ;

If you want use alternations, define it multiple times.

statement: @if-statement;
statement: @for-statement;
statement: @while-statement;
statement: @var-declare-statement semicolon;
...

Every terminals should be defined in lexer.ts too.

Root non-terminal

Any valid rule files must define a root non-terminal __root(double underscore). This root non-terminal cannot be defined multiple times. After successful parsing, the parser may return an AST named S for below rules.

__root = @S;

S: ...

About

A typescript & Node.js implemented compiler front-end project includes CLR parser generator.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published