0
간단한 구문 분석기를 만들려고하면이 오류가 발생합니다. 파서는 (01 | 10 | 00 | 11) * (00 | 11)을 받아 들여야합니다. lookahead = 0을 사용하면 00100100이 정확한 입력을하더라도 오류를 트리거합니다. JavaCC에 00 일 00 일 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' 토큰을 찾지 못하는 것 같습니다. 입력의 마지막 자리 바로 다음에 개행, 복귀 또는 탭이 있는지 확인 하시겠습니까? –
명백히 0011이 주어진 경우, 파서가 00을 읽고 q3()을 호출 한 후 q0()을 선택하고 q3에서 11을 읽는 대신에 여전히 입력이 남아 있더라도을 선택합니다. 여전히 입력이 남아있을 때 파서가 q0()을 선택하게하는 방법이 있습니까? –
tettra