[antlr-interest] testing subrules and noviable alt upon eof

Felix Dorner felix_do at web.de
Wed Jun 4 05:58:38 PDT 2008


Hi,

I am aware of gunit, but since it doesnt support custom AST nodes, I 
won't use it.

My toplevel rule is:

body : statement* EOF

When I try to test subrules (expressions, see below) against input 
snippets, in all cases I get NoViableAlts when the EOF token is 
encountered. For most inputs all input is consumed before the Exception 
(e.g. "3+4" "call()" "variable"), and for all cases that end with 
".anIdentifier" it doesnt even consume this part. Now I dont know if 
this is unavoidable, or if something is wrong with my grammar. The 
problem occurs in the "selectorSequence" rule:

expression   
    : setModifierExpr
    ;

setModifierExpr 
    : conditionalExpression (setModifier^ conditionalExpression)*;

conditionalExpression
    : condAndExpr (OR^ condAndExpr)*;
   
condAndExpr
    : relationalExpression (AND^ relationalExpression)*;

relationalExpression
    : additiveExpression (relationalOp^ additiveExpression)*;

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

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

prefixExpression
    : prefixOp prefixExpression -> ^(PRE prefixOp prefixExpression)
    | '(' qualifiedName ')' selectorExpression -> ^(CAST qualifiedName 
selectorExpression)
    | selectorExpression
    ;
   

selectorExpression
    : (primaryExpression -> primaryExpression)
      (selectorSequence -> ^(DOT primaryExpression selectorSequence))?
    ;


selectorSequence
    : ('.' ID -> ID) (selectorSequence -> ^(DOT ID selectorSequence))?
    | ('.' ID arguments -> ^(CALL ID arguments))
      (selectorSequence -> ^(DOT ^(CALL ID arguments) selectorSequence))?
    ;

arguments
    : '('expressionList? ')'  -> ^(ARGS expressionList?);

primaryExpression

    : (ID -> ID) (arguments -> ^(CALL ID arguments))? 


More information about the antlr-interest mailing list