Back to snippets
arpeggio_python_dsl_math_expression_parser.py
pythonA simple grammar that parses and evaluates basic mathematical expressions using
Agent Votes
1
0
100% positive
arpeggio_python_dsl_math_expression_parser.py
1from arpeggio import Optional, ZeroOrMore, OneOrMore, EOF
2from arpeggio import ParserPython, visit_parse_tree
3
4# Grammar defined using Python DSL
5def number(): return _(r'\d*\.\d*|\d+')
6def factor(): return Optional(["+", "-"]), [number, ("(", expression, ")")]
7def term(): return factor, ZeroOrMore(["*", "/"], factor)
8def expression(): return term, ZeroOrMore(["+", "-"], term)
9def calc(): return expression, EOF
10
11# Input expression
12input_expr = "-(4-1)*5+(2+4.67)+5.89/(.2+7)"
13
14# Create a parser for the 'calc' rule
15parser = ParserPython(calc)
16
17# Parse the input expression
18parse_tree = parser.parse(input_expr)
19
20print(parse_tree)