나는 처음으로 javacc를 사용하고 있습니다.
이 오류가 계속 발생합니다.
Warning: Choice conflict in (...)* construct at line 35, column 43.
Expansion nested within construct and expansion following construct
have common prefixes, one of which is: <SPACE>
Consider using a lookahead of 2 or more for nested expansion.
나는 이것을 조사했고 파서가 가장 적절한 것을 알지 못하는 선택 때문이라는 것을 알았습니다.
void l_zero() : {} {
TOKEN1 ( TOKEN2 TOKEN1)*
}
(
이 줄 바로 전에 오류가 발생합니다. 누구나 제발 제대로 이해하도록 도와 줄 수 있습니까?
당신은 (내 생각)
void l_zero() : {} {
<TOKEN1> ( <SPACE> <TOKEN1> )*
}
문제는 a <SPACE>
가 l_zero
. 예를 들어 어딘가에 이와 같은 프로덕션이있을 수 있습니다.
void someNonterminal() : {} {
l_zero() <SPACE> <YETANOTHERTOKEN>
}
l_zero
시작할 때 남은 입력이 다음과 같다고 가정합니다.
<SOMETOKEN> <SPACE> ...
소비 후 <SOMETOKEN>
파서는 루프에 들어갈 지에서 반환할지 결정해야합니다 l_zero
. 다음 토큰을 기준으로 결정할 수 없습니다. 이것이 오류 메시지가 알려주는 것입니다.
무엇을해야합니까?
a l_zero
뒤에 오는 공백 뒤에 a가 올 수없는 경우 <TOKEN1>
입니까? 그렇다면 파서는 다음 두 토큰을 기반으로 루프에 들어갈 지 여부를 결정할 수 있습니다. 다음 중 하나로 충돌을 해결할 수 있습니다.
void l_zero() : {} {
<TOKEN1> ( LOOKAHEAD(2) <SPACE> <TOKEN1> )*
}
또는
void l_zero() : {} {
<TOKEN1> ( LOOKAHEAD(<SPACE> <TOKEN1>) <SPACE> <TOKEN1> )*
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다