저는 ANTLR을 처음 접했고 Lexer 및 Parser 규칙이 어떻게 작동하는지 이해하려고합니다. 필자는 필자가 작성한 문법에 문제가 있습니다. 처음 몇 개의 문자 만 실제로 일치하는 경우에도 여러 문자가 "일치"로 보이는 렉서 토큰과 관련이있는 것 같습니다.ANTLRv3 독서 옵션이 없음
apple basic say sponsor speeds speckled specific wonder
내가 얻을 출력은 다음과 같습니다 :
apple basic say nsor ds led ic wonder
나는 다음 테스트 입력을 구문 분석 AntlrWorks을 사용하고
grammar test;
options {
k=3;
}
@lexer::header { package test;}
@header {package test;}
sentence : (CHARACTER)*;
CHARACTER : 'a'..'z'|' ';
SPECIAL : 'special';
:이 문제를 설명하기 위해 간단한 ANTLR 3 문법을 작성했습니다
LEXER가 k = 1을 사용하고 있으므로 내 SPECIAL 토큰을 두 문자 'sp'가 포함 된 것으로 일치시키는 것으로 보입니다. 'sp'라는 문자를 만나면 실제 입력이 예상 토큰과 일치하지 않을 때까지 SPECIAL 리터럴 내에서 연속되는 문자를 찾습니다.이 때 (문자를 사용하는) 오류가 발생하고 나머지 문장이 계속됩니다 . 각 오류의 형식은 다음과 같습니다.
line 1:18 mismatched chracter 'o' expecting 'e'
그러나 이것은 작성하려고하는 동작이 아닙니다. 이 테스트 예제에 포함되지 않은 다른 구문 분석기 규칙에 사용하기 위해 키워드 ('special')와 일치하는 렉서 토큰을 만들고 싶습니다. 실제로 같은 K와 같은 ANTLR 3 옵션 (설정하는 방법
- : 그러나, 나는 다른 규칙을 원하지 않는/단지 에 어떻게 입력 요약하면
영향을받을 수 같은 초기 문자를 포함 = 2 또는 k = 3 등)? 적어도 여기서는 사용하려는 옵션이 설정되지 않은 것 같습니다.
- 완전한 일치를 포함하지 않는 입력의 다른 부분의 처리에 영향을주지 않으면 서 내 입력의 특정 키워드와 일치시키기 위해 구문 분석기 또는 렉서 규칙을 만드는 더 좋은 방법이 있습니까?
ANTLRWorks 1.4.2에서 샘플을 실행하면 구문 분석이 잘되며 출력은 무엇입니까? –
재미 있습니다. @Bas. 또한 ANTLRWorks 1.4.2 (일반적으로 IntelliJ 10.0.3에서 실행)를 사용하고 있습니다. 디버그 모드에서 나는 오류를 보여주는 "Output"탭을 가지고있다. 또한 구문 분석 트리 (Parse Tree 탭)를 검사하여 "spe .."비트가 삭제되는지 확인할 수 있습니다. 마찬가지로 "스택 탭"은 내 컴퓨터의 문제를 보여줍니다. 너는 문제를 보이지 않는가? ParseTree를 검사하고 "spec ..."문자로 시작하는 비트를 포함하여 전체 문장을 볼 수 있습니까? – Glennn
예제 입력에서 문장 규칙을 실행할 때 구문 분석 트리를 생성하는 해석기 탭을 사용하고 있습니다. –