Skip to content

Instantly share code, notes, and snippets.

@pamelafox
Created April 15, 2021 17:21
Show Gist options
  • Save pamelafox/17fc53cfa20f071b87fd3dc2504fb279 to your computer and use it in GitHub Desktop.
Save pamelafox/17fc53cfa20f071b87fd3dc2504fb279 to your computer and use it in GitHub Desktop.
Lark output
>>> grammar = """
?start: calc_op
?calc_op: OPEN OP operand* CLOSE
operand: calc_op | NUMBER
OPEN: "("
CLOSE: ")"
OP: "+" | "-" | "*" | "/"
%ignore " " // Disregard spaces in text
%import common.NUMBER
"""
>>> from lark import Lark, LarkError, Token, Tree
>>> parser = Lark(grammar, start="start")
>>> parser.grammar.rule_defs
[('start', [], Tree('expansions', [Tree('expansion', [Tree('value', [Token('RULE', 'calc_op')])])]), RuleOptions(False, True, None, None)), ('calc_op', [], Tree('expansions', [Tree('expansion', [Tree('value', [Token('TERMINAL', 'OPEN')]), Tree('value', [Token('TERMINAL', 'OP')]), Tree('expr', [Tree('value', [Token('RULE', 'operand')]), Token('OP', '*')]), Tree('value', [Token('TERMINAL', 'CLOSE')])])]), RuleOptions(False, True, None, None)), ('operand', [], Tree('expansions', [Tree('expansions', [Tree('expansion', [Tree('value', [Token('RULE', 'calc_op')])])]), Tree('expansion', [Tree('value', [Token('TERMINAL', 'NUMBER')])])]), RuleOptions(False, False, None, None))]
>>> parser.grammar.term_defs
[('OPEN', (Tree('expansions', [Tree('expansion', [Tree('value', [Tree('literal', [Token('STRING', '"("')])])])]), 1)), ('CLOSE', (Tree('expansions', [Tree('expansion', [Tree('value', [Tree('literal', [Token('STRING', '")"')])])])]), 1)), ('OP', (Tree('expansions', [Tree('expansions', [Tree('expansions', [Tree('expansions', [Tree('expansion', [Tree('value', [Tree('literal', [Token('STRING', '"+"')])])])]), Tree('expansion', [Tree('value', [Tree('literal', [Token('STRING', '"-"')])])])]), Tree('expansion', [Tree('value', [Tree('literal', [Token('STRING', '"*"')])])])]), Tree('expansion', [Tree('value', [Tree('literal', [Token('STRING', '"/"')])])])]), 1)), ['NUMBER', (Tree('expansions', [Tree('expansions', [Tree('expansion', [Tree('value', [Tree('expansions', [Tree('expansions', [Tree('expansion', [Tree('value', [Tree('expansions', [Tree('expansion', [Tree('expr', [Tree('value', [Tree('expansions', [Tree('expansion', [Tree('value', [Tree('range', [Token('STRING', '"0"'), Token('STRING', '"9"')])])])])]), Token('OP', '+')])])])]), Tree('value', [Tree('expansions', [Tree('expansion', [Tree('expansions', [Tree('expansions', [Tree('expansion', [Tree('value', [Tree('literal', [Token('STRING', '"e"')])])])]), Tree('expansion', [Tree('value', [Tree('literal', [Token('STRING', '"E"')])])])]), Tree('value', [Tree('expansions', [Tree('expansion', [Tree('maybe', [Tree('expansions', [Tree('expansions', [Tree('expansion', [Tree('value', [Tree('literal', [Token('STRING', '"+"')])])])]), Tree('expansion', [Tree('value', [Tree('literal', [Token('STRING', '"-"')])])])])]), Tree('value', [Tree('expansions', [Tree('expansion', [Tree('expr', [Tree('value', [Tree('expansions', [Tree('expansion', [Tree('value', [Tree('range', [Token('STRING', '"0"'), Token('STRING', '"9"')])])])])]), Token('OP', '+')])])])])])])])])])])])]), Tree('expansion', [Tree('value', [Tree('expansions', [Tree('expansions', [Tree('expansion', [Tree('value', [Tree('expansions', [Tree('expansion', [Tree('expr', [Tree('value', [Tree('expansions', [Tree('expansion', [Tree('value', [Tree('range', [Token('STRING', '"0"'), Token('STRING', '"9"')])])])])]), Token('OP', '+')])])])]), Tree('value', [Tree('literal', [Token('STRING', '"."')])]), Tree('expr', [Tree('value', [Tree('expansions', [Tree('expansion', [Tree('expr', [Tree('value', [Tree('expansions', [Tree('expansion', [Tree('value', [Tree('range', [Token('STRING', '"0"'), Token('STRING', '"9"')])])])])]), Token('OP', '+')])])])]), Token('OP', '?')])])]), Tree('expansion', [Tree('value', [Tree('literal', [Token('STRING', '"."')])]), Tree('value', [Tree('expansions', [Tree('expansion', [Tree('expr', [Tree('value', [Tree('expansions', [Tree('expansion', [Tree('value', [Tree('range', [Token('STRING', '"0"'), Token('STRING', '"9"')])])])])]), Token('OP', '+')])])])])])])]), Tree('expr', [Tree('value', [Tree('expansions', [Tree('expansion', [Tree('expansions', [Tree('expansions', [Tree('expansion', [Tree('value', [Tree('literal', [Token('STRING', '"e"')])])])]), Tree('expansion', [Tree('value', [Tree('literal', [Token('STRING', '"E"')])])])]), Tree('value', [Tree('expansions', [Tree('expansion', [Tree('maybe', [Tree('expansions', [Tree('expansions', [Tree('expansion', [Tree('value', [Tree('literal', [Token('STRING', '"+"')])])])]), Tree('expansion', [Tree('value', [Tree('literal', [Token('STRING', '"-"')])])])])]), Tree('value', [Tree('expansions', [Tree('expansion', [Tree('expr', [Tree('value', [Tree('expansions', [Tree('expansion', [Tree('value', [Tree('range', [Token('STRING', '"0"'), Token('STRING', '"9"')])])])])]), Token('OP', '+')])])])])])])])])])]), Token('OP', '?')])])])])])]), Tree('expansion', [Tree('value', [Tree('expansions', [Tree('expansion', [Tree('expr', [Tree('value', [Tree('expansions', [Tree('expansion', [Tree('value', [Tree('range', [Token('STRING', '"0"'), Token('STRING', '"9"')])])])])]), Token('OP', '+')])])])])])]), 1)], ('__IGNORE_0', (Tree('expansions', [Tree('expansion', [Tree('value', [Tree('literal', [Token('STRING', '" "')])])])]), 1))]
@9klass
Copy link

9klass commented May 9, 2021

thanks for your work!!!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment