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しました。&キャラクターは無視されているようです。ここで何が問題なのですか?

4

1 に答える 1

1

実際、無効な式ABC &= DEFは渡されていません。原因となりNoViableAltExceptionます。

ここに画像の説明を入力

于 2012-12-17T10:36:06.713 に答える