Convenient parser generator for Python(check out https://github.com/thautwarm/RBNF for an advanced version).
LR ::= LR 'a' 'b' | LR 'c' | 'd';
Python
pip installl -U EBNFParser
git clone https://github.com/thautwarm/EBNFParser
cd EBNFParser/Python
python setup.py install
Command Line Tools
ruiko
.ruiko ./<grammar File> ./<output filename>
[--testTk] # print tokenized words or not
[--test] # generate test script "test_lang.py"
Use command ruiko
to generate parser and token files, and then you can use test_lang.py
to test your parser.
python ./test_lang.py Stmt " (+ 1 2) " -o test.json --testTk
Integrated into your own project
from Ruikowa.ObjectRegex.ASTDef import Ast
from Ruikowa.ErrorHandler import ErrorHandler
from Ruikowa.ObjectRegex.MetaInfo import MetaInfo
from Ruikowa.ObjectRegex.Tokenizer import Tokenizer
from <your own generated parser module> import <top parser>, token_table
import typing as t
def token_func(src_code: str) -> t.Iterable[Tokenizer]:
return Tokenizer.from_raw_strings(src_code, token_table, ({<the names of tokenizers you would ignore>}, {<the string contents of tokenizers you would ignore>}))
parser = ErrorHandler(<top parser>.match, token_func)
def parse(filename: str) -> Ast:
return parser.from_file(filename)
print(parse(<filename of your dsl source code>))
Need more? See the documents.
Here are some examples to refer:
EBNFParser 2.0
Old version(Before EBNFParser 1.1).
DBG-Lang
A DSL for SQL development in Python areas.
Rem(Based EBNFParser1.1)
A full featured modern language to enhance program readability based on CPython.
Lang.Red
An attempt to making ASDL in CPython(unfinished yet)
Will support F# and Rem.