나는 ANTLR4 문법에서 한 번에 룰러 규칙 오류를 모두 모호하게 제거하려고 노력하고 있습니다. 내가하는 것처럼 보이는 것이 문제를 해결하지 못합니다. 그들은 모두 공통점이ANTLR4 누락 규칙 정의
당신이 눈치 챘을 수도로Identifier: Letter (Letter | Digit | Und)+;
Keyword : Letter+;
Param: Number | Identifier;
Statement: Keyword Lpr Param+ Rpr;
Block: Lbc Statement+ Rbc;
, 하나 개의 토큰이 편지입니다 다음과 같이 나에게 같은 오류를주고 특히이 렉서 규칙입니다. 내가 ANTLR 잠재적으로 동일한 결과 여러 정의를 허용하지 않습니다하지 않는 한이, 모호성을 일으킬 수있는 방법을 찾을 수없는
fragment Digit: '0'..'9';
fragment Letter: ('A'..'Z');
Und: '_';
Lpr: '(';
Rpr: ')';
이 다른 토큰으로 정의됩니다.
저를 청소 해 주셔서 감사합니다. 불행히도 그것은 나의 초기 질문이 여전히 의미하는 것을 의미합니다. 이러한 규칙을 모두 동일한 오류가 발생시키는 원인은 무엇입니까? –
"Keyword"에 완전히 의존하는 모든 규칙은 완전히 그림자 처리되어 동일한 오류 ('번호'는 정의되지 않은 것으로 표시)로 실패합니다. 'Identifier'와'Keyword'의 순서를 바꾸는 것만으로는 효과가 없습니다. 문자를 포함하는 모든 식별자는 키워드로 사용됩니다. 전형적으로 키워드는 명시 적으로 지정되고'Identifier' 규칙 같은 catchall 규칙이 뒤 따른다. 키워드로 명시 적으로 명명되지 않은'Letter +'는 식별자입니다. – GRosenberg
이제 아이디어를 얻었습니다. 문제는 필자가 렉서 (lexer)에서 구문을 정의하고 구문 분석기의 의미를 정의하려고 할 때 추가 키워드 (기본적으로 키워드가 함수 이름이 됨)의 정의를 허용하는 문법을 정의하려고한다는 것입니다. –