EBNFParser
Parse Many, Any, Every
LR ::= LR 'a' 'b' | LR 'c' | 'd';
Install
-
Python
- pip
pip installl -U EBNFParser
- setup
git clone https://github.com/thautwarm/EBNFParser cd EBNFParser/Python python setup.py install
Usage
-
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 usetest_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.
Examples
Here are some examples to refer:
EBNFParser 2.0
-
Rem
The Rem programming language.
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.