2
JavaCC에서 다음 프로덕션 규칙을 작성하려고하는데 선택 충돌 오류가 발생합니다. 미리보기를 사용하여 문제를 해결하는 방법을 알고 있지만 과제를 위해 사용할 수 없다는 인상하에 있습니다.미리보기없이 선택 충돌 제거 - JavaCC
void statement() #void:{}
{
<ID> (<ASSIGN>(expression() | <STRING>))| <LEFTBRACKET>argument_list()<RIGHTBRACKET>
| <NOT>expression()
| <QUESTIONMARK><ID>
| <LEFTBRACE>(statement()<SEMICOLON>)*<RIGHTBRACE>
| <IF>condition()<THEN>statement() <-- Conflict, parser will always pick this one
| <IF>condition()<THEN>statement()<ELSE>statement() <--
| <WHILE>condition()<DO>statement()
| {}
}
의견을 보내 주시면 감사하겠습니다.
안녕하세요 덕분된다. 나는이 솔루션을 가지고 있었지만 우리가 lookaheads를 사용할 수 있는지 확신하지 못했다. 내가 이것을 사용한다면 파서는 여전히 LL (1)이 될 것인가? 또한이 문제에 대한 다른 해결책이 없다면 올바른 대답이라고 생각합니다! 다시 한 번 감사드립니다 – TomSelleck
@Tomcelic'LOOKAHEAD (1)'을 추가하면'LL (2)'이되지만, 100 % 확실하지는 않다고 생각합니다. 문법은 ''을 추가하지 않으면 애매하지만, 파서는 그것을 취하여 'else'를 가장 안쪽의'if'와 짝을 지을 것입니다. –
dasblinkenlight
이것이 효과가 있다고 생각하십니까? /* IF 문 */ 무효 if_statement() {} { 조건() 문() ( 문() | {}) } –
TomSelleck