2017-11-11 6 views
1

I 렉스 다음 문법/문자열을 파싱 난 시점에서 걸려 모두 공백으로 토큰 화한다 있습니다Antlr4 간단한 토큰 화 실패

grammar MyItems; 
theseItems : item (SPACE item)* ; 
item : FIELDTEXT+ ; 
SPACE : ' ' ; 
FIELDTEXT : ~[' '] ; 

를 입력으로 :

V3 AGL V445 

line 1:0 mismatched input 'V3' expecting FIELDTEXT 

왜 나에게 3 가지 항목을 제공하지 않습니까? 게시 된 문법

답변

1

그 오류를 가지고 있지만하지 않습니다

$ a4 MyItems_op.g4 
warning(180): MyItems_op.g4:5:13: chars "'" used multiple times in set [' '] 
$ javac M*.java 
$ grun MyItems_op theseItems -tokens -diagnostics input.text 
[@0,0:0='V',<FIELDTEXT>,1:0] 
[@1,1:1='3',<FIELDTEXT>,1:1] 
[@2,2:2=' ',<' '>,1:2] 
[@3,3:3='A',<FIELDTEXT>,1:3] 
[@4,4:4='G',<FIELDTEXT>,1:4] 
[@5,5:5='L',<FIELDTEXT>,1:5] 
... 

당신이 볼 수 있듯이, 규칙

FIELDTEXT : ~[' '] ; 

는 단일 문자와 일치합니다.

이 시도 :

grammar MyItems; 

theseItems 
@init {System.out.println("MyItems last update 0030");} 
    : item (SPACE item)* 
    ; 

item 
    : FIELDTEXT 
    ; 

SPACE  : ' ' ; 
FIELDTEXT : ~[ \r\n]+ ; 

NL : [\r\n]+ -> skip ;   

실행 :

$ alias 
alias a4='java -jar /usr/local/lib/antlr-4.6-complete.jar' 
$ a4 MyItems.g4 
$ javac M*.java 
$ grun MyItems theseItems -tokens -diagnostics input.text 
[@0,0:1='V3',<FIELDTEXT>,1:0] 
[@1,2:2=' ',<' '>,1:2] 
[@2,3:5='AGL',<FIELDTEXT>,1:3] 
[@3,6:6=' ',<' '>,1:6] 
[@4,7:10='V445',<FIELDTEXT>,1:7] 
[@5,12:11='<EOF>',<EOF>,2:0] 
MyItems last update 0030 
$ hexdump -C input.text 
00000000 56 33 20 41 47 4c 20 56 34 34 35 0a    |V3 AGL V445.| 
0000000c 
+0

안녕하세요 버나드, 귀하의 의견을 주셔서 감사합니다. 이 문법을 다른 프로젝트로 옮기더라도 내 문제는 해결되지 않았습니다. 그러므로 나는 그 오류가 셋업의 인공물이라고 추측한다. – NWS