2017-03-28 109 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,「請注意,您不要在多個詞法分析器規則的右側指定相同的字符串字面值,這些字面值不明確,可能會匹配多個標記類型。」

相關問題