2017-03-28 51 views
0

我写了下面的Antlr语法阅读:为什么减号不能正确地在我的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.

回答

0

APPROXMINUS规则是相互不明确的。尝试这些更改:

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

APPROX: '~' ; 
0

我已经找出原因。改变

APPROX: '~' | '-' ; 

approx: '~' | MINUS ; 

现在我的代码是工作之后!

实际上,明确的ANTLR4参考文献在p。 280,“请注意,您不要在多个词法分析器规则的右侧指定相同的字符串字面值,这些字面值不明确,可能会匹配多个标记类型。”

相关问题