我在清除JavaCC中的左遞歸時遇到了問題。我找到了一個解決方案Epsilon tokens,但似乎JavaCC無法與Epsilon令牌一起工作得很好(如TOKEN : <eps : "">
)。下面我準備一個我的問題的例子:JavaCC中的左迴歸(直接和間接)消除
void prod1() :
{}
{
<beta1>
| prod2() <alpha1>
}
void prod2() :
{}
{
<beta2>
| [prod2()] <alpha2>
| prod1() <alpha3>
}
在這裏,我們看到直接和不連續的左遞歸。這是我真正語法的一個簡化例子(我的JavaCC語法基於現有的BNF語法,因此我被迫以這種形式使用它)。
第二種選擇用於'prod2'只是'prod2'。我懷疑是一個錯字。 –
謝謝!我修復了這個錯字 –
有必要改變語法(不改變語言)。在許多情況下,您可以使用迭代('{...}')來解決遞歸。 – Henry