Tutorial 4 Subclassing Node
まんま
>>> from lepl import * >>> class Add(Node): pass ... >>> class Sub(Node): pass ... >>> class Mul(Node): pass ... >>> class Div(Node): pass ... >>> symbol = Token('[^0-9a-zA-Z \t\r\n]') >>> value = Token(UnsignedFloat()) >>> negfloat = lambda x: -float(x) >>> number = Or(value >> float, ~symbol('-') & value >> negfloat) >>> group2, group3 = Delayed(), Delayed() >>> parens = ~symbol('(') & group3 & ~symbol(')') >>> group1 = parens | number >>> mul = group1 & ~symbol('*') & group2 > Mul >>> div = group1 & ~symbol('/') & group2 > Div >>> group2 += mul | div | group1 >>> add = group2 & ~symbol('+') & group3 > Add >>> sub = group2 & ~symbol('-') & group3 > Sub >>> group3 += add | sub | group2 >>> ast = group3.parse('1+2*(3-4)+5/6+7')[0] >>> print(ast) Add +- 1.0 `- Add +- Mul | +- 2.0 | `- Sub | +- 3.0 | `- 4.0 `- Add +- Div | +- 5.0 | `- 6.0 `- 7.0