0
在以下代碼上運行ANTLR3時,我收到警告消息 - 警告(200):MYGRAMMAR.g:40:36:決策可以使用多個備選方案匹配諸如「QMARK」之類的輸入:3,4 因此,對於該輸入禁用替代項4。ANTLR3 - 決策可以使用多個替代方案匹配輸入
該警告消息指向我postfixExpr。有沒有辦法來解決這個問題?
grammar MYGRAMMAR;
options {language = C;}
tokens {
BANG = '!';
COLON = ':';
FALSE_LITERAL = 'false';
GREATER = '>';
LSHIFT = '<<';
MINUS = '-';
MINUS_MINUS = '--';
PLUS = '+';
PLUS_PLUS = '++';
QMARK = '?';
QMARK_COLON = '?:';
TILDE = '~';
TRUE_LITERAL = 'true';
}
condExpr
: shiftExpr (QMARK condExpr COLON condExpr)? ;
shiftExpr
: addExpr (shiftOp addExpr)* ;
addExpr
: qmarkColonExpr (addOp qmarkColonExpr)* ;
qmarkColonExpr
: prefixExpr (QMARK_COLON prefixExpr)? ;
prefixExpr
: (prefixOrUnaryMinus | postfixExpr) ;
prefixOrUnaryMinus
: prefixOp prefixExpr ;
postfixExpr
: primaryExpr (postfixOp | BANG | QMARK)*;
primaryExpr
: literal ;
shiftOp
: (LSHIFT | rShift);
addOp
: (PLUS | MINUS);
prefixOp
: (BANG | MINUS | TILDE | PLUS_PLUS | MINUS_MINUS);
postfixOp
: (PLUS_PLUS | MINUS_MINUS);
rShift
: (GREATER GREATER)=> a=GREATER b=GREATER {assertNoSpace($a,$b)}? ;
literal
: (TRUE_LITERAL | FALSE_LITERAL);
assertNoSpace [pANTLR3_COMMON_TOKEN t1, pANTLR3_COMMON_TOKEN t2]
: { $t1->line == $t2->line && $t1->getCharPositionInLine($t1) + 1 == $t2->getCharPositionInLine($t2) }? ;
嗨Raven。感謝您的評論。我改變了令牌的順序,但它沒有解決問題。 –