3

这是一个非常简单的语法:

grammar test;

DIGIT : [0-9] ;
WS : [ \r\n\t]+ -> skip ;
value : DIGIT+ ;

OSX下使用antlr v4.0b3和JAVA 1.6版

使用以下命令编译语法:

antlr4 test.g4
javac *.java

然后我用 grun 来测试语法:

grun test value -tokens

结果如下:

grun test value -tokens
12
[eof]
[@0,0:0='1',<1>,1:0]
[@1,1:1='2',<1>,1:1]
[@2,3:2='<EOF>',<-1>,2:0]

我的问题是:为什么我得到两个令牌('1' 和'2')而不是一个('12')?

非常感谢那些可以帮助我的人!!

干杯!

盖伊

4

1 回答 1

4

您已要求 DIGIT 一次匹配一个数字,然后将其传递给解析器规则:值。我想你想要的是真的

value : INT ;
INT : [0-9]+ ;

:)

特伦斯

于 2012-11-30T01:06:07.113 回答