Я попытался принять этот код и преобразовать его в нечто для проекта, над которым я работаю, для обработки языка программирования, но у меня проблема с упрощенной версией:
op = oneOf( '+ - / *')
lparen, rparen = Literal('('), Literal(')')
expr = Forward()
expr << ( Word(nums) | ( expr + op + expr ) | ( lparen + expr + rparen) )
Я играл с несколькими различными модификациями этой простой настройки. Обычно, попробуйте что-то вроде:
print(expr.parseString('1+2'))
Вернется ['1']
. Хотя я попадаю в глубокую рекурсию с чем-то вроде:
print(expr.parseString('(1+2)'))
Что мне не хватает в отношении простой рекурсии, что я не могу анализировать произвольно арифметические выражения, такие как 1+(2 * 3-(4*(5+6)-(7))...
?