为什么在我的Antlr语法中无法正确读取减号

时间:2017-03-28 13:59:52

标签: grammar antlr4

我写了以下Antlr语法:

grammar Hello;
file: row+ ;
row: karyotype NEWLINE ;
karyotype: chrNum (',' sexChr CONST?)? (',' event)* ;
event: prefixPlus gainChr (CONST | INH)?       # gainChrEvent
     | prefixMinus lossChr (CONST | INH)?      # lossChrEvent
     ;
chrNum: numRangeTypeI ;
numRangeTypeI: INT (APPROX INT)? ;
gainChr: INT | SEX ;
lossChr: INT | SEX ;
prefixPlus: PLUS QUES? | QUES PLUS ;
prefixMinus: MINUS QUES? | QUES MINUS ; 
sexChr: (SEX | QUES)+ ;

APPROX:  '~' | '-' ;
CONST: 'c' ;
INH: 'dn' | 'inh' | 'mat' | 'pat' ;
INT: [0-9]+ ;
MINUS: '-' ;
NEWLINE: '\r'? '\n' ;
PLUS: '+' ;
QUES: '?' ;
SEX: [XY]+ ;

WS : [ \t]+ -> skip ;

但是当我使用以下内容进行解析时:

43-45,XX,-4

Antlr告诉我"第1:9行不匹配的输入' - '期待{' - ',' +','?'}"

你知道我的语法有什么问题吗? The grun -gui parse-tree picture has been attached.

2 个答案:

答案 0 :(得分:0)

APPROXMINUS规则相互模糊。尝试这些更改:

numRangeTypeI: INT ((APPROX | MINUS) INT)? ;

APPROX:  '~' ;

答案 1 :(得分:0)

我弄明白了为什么。更改后

APPROX:  '~' | '-' ;

approx:  '~' | MINUS ;

我的代码现在正在运作!

实际上,确定的ANTLR4参考文献在p。 280,"注意不要在多个词法分析器规则的右侧指定相同的字符串文字。这样的文字是模糊的,可以匹配多种令牌类型。"