ANTLR:为什么无效输入可以匹配语法定义

问题描述 投票:1回答:1

我为计算表达式编写了一个非常简单的语法定义:

grammar SimpleCalc;

options {
    output=AST;
}

tokens {
    PLUS  = '+' ;
    MINUS = '-' ;
    MULT = '*' ;
    DIV = '/' ;
}

/*------------------------------------------------------------------
 * LEXER RULES
 *------------------------------------------------------------------*/

ID  : ('a'..'z' | 'A' .. 'Z' | '0' .. '9')+ ;

WHITESPACE : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+    { Skip(); } ;

/*------------------------------------------------------------------
 * PARSER RULES
 *------------------------------------------------------------------*/

start: expr EOF;

expr : multExpr ((PLUS | MINUS)^ multExpr)*;

multExpr : atom ((MULT | DIV)^ atom )*;

atom : ID
     | '(' expr ')' -> expr;

我已经尝试过ABC &* DEF的无效表达式start,但它通过了。看起来像&字符被忽略了。这有什么问题?

antlr antlr3
1个回答
1
投票

实际上你的无效表达ABC &= DEF尚未通过;它导致NoViableAltException

© www.soinside.com 2019 - 2024. All rights reserved.