Tutorial 3 Building an AST with Node

まんま

>>> from lepl import *
>>> symbol = Token('[^0-9a-zA-Z \t\r\n]')
>>> value = Token(UnsignedFloat())
>>> negfloat = lambda x: -float(x)
>>> number = Or(value >> float,
...             ~symbol('-') & value >> negfloat)
>>> expr = Delayed()
>>> add = number & symbol('+') & expr > Node
>>> sub = number & symbol('-') & expr > Node
>>> expr += add | sub | number
>>> expr.parse('1+2-3 +4-5')
[Node(...)]
>>> ast = expr.parse('1+2-3 +4-5')[0]
>>> print(ast)
Node
 +- 1.0
 +- '+'
 `- Node
     +- 2.0
     +- '-'
     `- Node
         +- 3.0
         +- '+'
         `- Node
             +- 4.0
             +- '-'
             `- 5.0