결합 된 문법 Antlr 옵션 필터
문제
문법이 결합되어 있습니다 (동일한 파일의 Lexer 및 Parser). 어떻게 설정합니까?
filter = true
렉서에게?
감사
해결책
Bart가 그의 대답에서 말한 것을 명확히하기 위해 :
The options{filter=true;} only works in lexer-grammars. You will need to define a parser- and lexer grammar in two separate files:
실제로 Lexer와 Parser를 2 개의 별도 파일에 넣을 필요는 없습니다. Lexer 문법에 필터 규칙을 배치하면됩니다. Lexer와 Parser 문법 모두 ~할 수 있다 같은 파일에 있습니다.
Bart의 분리 된 파일에 넣는 조언은 내가 일반적으로 사용하는 접근법이지만.
따라서 예를 들어 보려면 단일 파일 로이 작업을 수행 할 수 있습니다.
Parser 및 Lexer Grammar.g가있는 단일 파일 g
parser grammar FooParser;
parse
: Number+ EOF
;
lexer grammar FooLexer;
options{filter=true;}
Number
: '0'..'9'+
;
필터 규칙이 Lexer 클래스 정의에있는 방법에 유의하지만 Lexer와 Parser는 동일한 파일에 있습니다.
다른 팁
당신은 그렇지 않습니다. 그만큼 options{filter=true;}
Lexer-Grammars에서만 작동합니다. 두 개의 개별 파일에서 파서 및 렉서 문법을 정의해야합니다 (편집하다: 아니요, 그들은 하나의 파일로 넣을 수 있습니다. Chollida의 답변을 참조하십시오) :
fooparser.g
parser grammar FooParser;
parse
: Number+ EOF
;
우우 렉서 .g
lexer grammar FooLexer;
options{filter=true;}
Number
: '0'..'9'+
;
이 Lexer와 Parser를 결합하면 숫자로 구성된 파일 (또는 문자열)의 문자열 만 구문 분석하는 파서가됩니다.
Lexer 규칙이 표시되지 않지만 명령 줄에서 Lexer 및 Parter를 생성하기 때문에 Antlr 플러그인 또는 antlrworks가 불평 할 수 있습니다.
java -cp antlr-3.2.jar org.antlr.Tool FooLexer.g
java -cp antlr-3.2.jar org.antlr.Tool FooParser.g
잘 작동합니다.
제휴하지 않습니다 StackOverflow