0
単純なパーサーを作成しようとするとこのエラーが発生します。パーサーは(01 | 10 | 00 | 11)*(00 | 11)を受け入れる必要があります。 lookahead = 0を使用すると、正しい入力であっても00100100がエラーを引き起こします。 JavaCCのは00 1 00 1 00、いない00 10 01 00として、それを読んしかし、私はそれを修正するために先読みを追加するとき、私はJavaCCでLookahead> 0のときParseExceptionエラーが発生する
Exception in thread "main" ParseException: Encountered "" at line 1, column 6.
Was expecting one of:
at GS.generateParseException(GS.java:453)
at GS.jj_consume_token(GS.java:337)
at GS.q3(GS.java:50)
at GS.q0(GS.java:17)
at GS.q1(GS.java:32)
at GS.q0(GS.java:14)
at GS.q3(GS.java:43)
at GS.q0(GS.java:17)
at GS.main(GS.java:8)
を得たので誰も私が原因を見つけるのを助けることができますか? ご協力いただければ幸いです。あなたはインラインQ3、あなたはそのQ0が再帰残っている見ることができれば、あなたが必要とするので:ありがとう
options{
LOOKAHEAD = 4;
}
PARSER_BEGIN(GS)
public class GS {
public static void main(String args[]) throws ParseException {
GS parser = new GS(System.in);
parser.q0();
}
}
PARSER_END(GS)
TOKEN:
{
<END : (["\n", "\r", "\t"])+>
}
void q0():{}
{
"1" q1() | "0" q2() | "00" q3() | "11" q3()
}
void q1():{}
{
"0" q0()
}
void q2():{}
{
"1" q0()
}
void q3():{}
{
q0() | <END>
}
私は 'DEBUG_PARSER'をtrueに設定することをお勧めします。 –
おそらく 'DEBUG_TOKEN_MANGER'です。 'END'トークンを見つけられないと私は思っています。入力の最後の数字の直後に改行、改行、またはタブがあることを確かめていますか?どうやら –
パーサは00とコールQ3(読み取り後)、0011を与えられたのではなく、(Q0を選択する)、それは入力左はまだありますにもかかわらずを選択Q3に、11をお読みください。まだ入力が残っているときにパーサーがq0()を選択するように強制する方法はありますか? –
tettra