2
는 EBNF에 다음과 같은 규칙을 가정 비를 prdocues하는ANTLR : 비 LL (*)를 해결하는 문제
list : '(' datum+ '.' datum ')'
| '(' datum* ')'
| ABBREV_PREFIX datum
;
: 같은 목록 규칙에 대한
<datum> --> <simple datum> | <compound datum>
<simple datum> --> <boolean> | <number>
| <character> | <string> | <symbol>
<symbol> --> <identifier>
<compound datum> --> <list> | <vector>
<list> --> (<datum>*) | (<datum>+ . <datum>)
| <abbreviation>
<abbreviation> --> <abbrev prefix> <datum>
<abbrev prefix> --> ' | ` | , | ,@
<vector> --> #(<datum>*)
에서, ANTLR 문법이 보일 것이다 알트 1,2에 대한 LL (*) 결정 오류. 이 문장을 리팩터링하려고 시도했지만 작동하는 것을 얻을 수 없습니다. 예
:
list : '(' datum* (datum'.' datum)? ')'
| ABBREV_PREFIX datum
;
같은 오류를 생성한다. 내게 가장 큰 문제는 하나의 규칙에는 +가 있고 다른 하나에는 * *이 사용되므로 왼쪽으로 분해하는 것이 일반적으로 그렇게 간단하지 않다는 것입니다.