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 でこのような再帰的な定義を指定する正しい方法は何ですか?