不確定是什麼導致了這一點。當我嘗試編譯文件,我得到一個錯誤說「左遞歸檢測的表達... - >片段...... - >表達在.jj文件中檢測到左遞歸
的代碼,有這是本節
void statement() : {}
{
identifier() <ASSIGN> expression()
| identifier() <ASSIGN> <STRING>
| <EMARK> expression()
| <QMARK> identifier()
| identifier(arg_list())
| <BEGIN>(statement() <SEMIC>)+ <END>
| <IF> condition() <THEN> statement()
| <IF> condition() <THEN> statement() <ELSE> statement()
| <WHILE> (condition()) <DO> statement()
| {}
}
void expression() : {}
{
fragment()((<PLUS_SIGN> | <MINUS_SIGN> | <MULT_SIGN> | <DIV_SIGN>) fragment())*
}
void fragment() : {}
{
identifier() | <NUM> | (<PLUS_SIGN> | <MINUS_SIGN>)fragment() | expression()
}
面積
我真的不知道如何去解決這個問題,並希望得到任何幫助吧! 謝謝!
供參考:+++++ ---- +++ 6將是一個有效的片段 – Paperwaste
這個任務已經在幾個最近的堆棧溢出問題中討論過。檢查出問題http://stackoverflow.com/questions/20287086/left-factoring-removing-left-recursion-javacc和http://stackoverflow.com/questions/20364288/left-recursion-elimination-in-an-ll1 -語法 。 –