Skip to content

marihachi/luna-parse

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

85 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

luna-parse

English | 日本語

luna-parse is a parser generator.
You can generate code by writing spec files.

luna-parse is influenced by the concept of PEG (Parsing Expression Grammar).
However, it differs from PEG in that it does not perform backtracking.

The parsers generated by luna-parse are designed to be manually modifiable as needed.
This is because it is difficult for a parser generator to fully generate real-world parsers.

I am currently developing it!

An example of spec file:

parser ExampleParser {
    root = topLevel+ ;
    topLevel = declareVar / show ;
    declareVar = VAR IDENT EQUAL expr SEMI ;
    show = SHOW expr SEMI ;
    term = NUMBER / IDENT ;

    expr = expression {
        atom term ;
        operator group {
            infix operator ASTA ;
            infix operator SLASH ;
        }
        operator group {
            infix operator PLUS ;
            infix operator MINUS ;
        }
    };
}

lexer ExampleLexer {
    ignored token SPACING = SPACE / LF ;
    SPACE = " " ;
    LF = "\r\n" / "\n" ;
    token ASTA = "*" ;
    token SLASH = "/" ;
    token PLUS = "+" ;
    token MINUS = "-" ;
    token EQUAL = "=" ;
    token SEMI = ";" ;
    token SHOW = "show" ;
    token VAR = "var" ;
    token NUMBER = [1-9] [0-9]* => { token.value = text(); };
    token IDENT = [a-zA-Z] [a-zA-Z0-9_]* => { token.value = text(); };
}

Parser input:

var n1 = 2;
var n2 = 3;
show n1 * n2 + 1;

Get started

  1. Install
git clone https://github.com/marihachi/luna-parse.git
cd luna-parse
npm i
npm run build
  1. Write a spec file of your parser

  2. Generate a code of your parser

npm run generate
  1. Enjoy your parser life!

Why use luna-parse?

luna-parse uses languages derived from BNF to describe grammars.
With traditional parser generators are generally not designed to make it easy to manually modify the generated parsers. Consequently, hand-writing parsers without using a parser generator was often easier to maintain.
However, since luna-parse generates recursive descent parsers, they can be easily modified later.
luna-parse also provides an expression parser that can efficiently parse expressions. An expression parser based on Operator-precedence parser (Precedence Climbing method) is generated.

License

MIT

About

A code generator of recursive descent parser and lexer.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published