Я пытаюсь создать парсер с использованием Treetop, который несколько рекурсивен. Выражение может быть числом, но также может быть добавлением выражений, поэтому я написал это:
grammar Language
rule expression
"(" _ expression _ ")" / addition / integer
end
rule addition
expression _ "+" _ expression
/
expression _ "-" _ expression
end
rule integer
'-'? _ [0-9]+
end
# space
rule _
' '*
end
end
Это просто не работает. Каждый раз, когда я пытаюсь разобрать что-либо, я получаю исключение «SystemStackError: слишком большой уровень стека» (переполнение стека! Ууу!). Есть идеи почему? Как правильно указать такое рекурсивное определение с помощью Treetop?