Skip to content
This repository was archived by the owner on Nov 29, 2020. It is now read-only.
/ EBNFParser Public archive

Convenient parser generator for Python(check out https://github.com/thautwarm/RBNF for an advanced version).

License

Notifications You must be signed in to change notification settings

thautwarm/EBNFParser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

200 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status PyPI version Release Note MIT License

EBNFParser

Parse Many, Any, Every Doc

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 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.

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.