- Notifications
You must be signed in to change notification settings - Fork32
A pure Python LR/GLR parser -http://www.igordejanovic.net/parglare/
License
igordejanovic/parglare
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
A pure Python scannerless LR/GLR parser.
For more information seethe docs.
This is just a small example to get the general idea. This example shows how toparse and evaluate expressions with 5 operations with different priority andassociativity. Evaluation is done using semantic/reduction actions.
The whole expression evaluator is done in under 30 lines of code!
fromparglareimportParser,Grammargrammar=r"""E: E '+' E {left, 1} | E '-' E {left, 1} | E '*' E {left, 2} | E '/' E {left, 2} | E '^' E {right, 3} | '(' E ')' | number;terminalsnumber: /\d+(\.\d+)?/;"""actions= {"E": [lambda_,n:n[0]+n[2],lambda_,n:n[0]-n[2],lambda_,n:n[0]*n[2],lambda_,n:n[0]/n[2],lambda_,n:n[0]**n[2],lambda_,n:n[1],lambda_,n:n[0]],"number":lambda_,value:float(value),}g=Grammar.from_string(grammar)parser=Parser(g,debug=True,actions=actions)result=parser.parse("34 + 4.6 / 2 * 4^2^2 + 78")print("Result = ",result)# Output# -- Debugging/tracing output with detailed info about grammar, productions,# -- terminals and nonterminals, DFA states, parsing progress,# -- and at the end of the output:# Result = 700.8
- Stable version:
$ pip install parglare
- Development version:
$ git clone git@github.com:igordejanovic/parglare.git$ pip install -e parglare
If you use parglare in your research please cite this paper:
Igor Dejanović, Parglare: A LR/GLR parser for Python,Science of Computer Programming, issn:0167-6423, p.102734,DOI:10.1016/j.scico.2021.102734, 2021.@article{dejanovic2021b, author = {Igor Dejanović}, title = {Parglare: A LR/GLR parser for Python}, doi = {10.1016/j.scico.2021.102734}, issn = {0167-6423}, journal = {Science of Computer Programming}, keywords = {parsing, LR, GLR, Python, visualization}, pages = {102734}, url = {https://www.sciencedirect.com/science/article/pii/S0167642321001271}, year = {2021}}MIT
Tested with 3.6-3.11
Initial layout/content of this package was created withCookiecutter and theaudreyr/cookiecutter-pypackage project template.
About
A pure Python LR/GLR parser -http://www.igordejanovic.net/parglare/
Topics
Resources
License
Contributing
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors11
Uh oh!
There was an error while loading.Please reload this page.
