2014-11-05 30 views
0

我想返回一个ExprData。 ExprData是我的项目中的类。当我尝试编译我得到的语法时:ANTLR4 - 返回特定规则对象

SASGrammarParser.java:684: error: cannot find symbol

这是一个导入问题。我如何实例化ExprData?

expr returns [ExprData exprData] 
    : expr AND expr      #AndExpr 
    | expr OR expr       #OrExpr 
    | expr IN '(' constant_list ')'  #InExpr 
    | expr (EQ | ASSIGN) expr   #EqualExpr 
    | expr op=(MULT | DIV) expr  #DivMultExpr 
    | expr op=(PLUS | MINUS) expr  #PlusMinusExpr 
    | expr LTEQ expr     #LessEqualExpr  
    | expr LT expr      #LessExpr 
    | expr GT expr      #GreaterExpr 
    | expr GTEQ expr      #GreaterEqualExpr 
    | '-' expr        #MinusExpr 
    | '(' expr ')'       #SimpleExpr     
    | variable        #VariableExp 
    | constant        #ConstantExp 
    | function        #FunctionExp 
    ; 

回答

0

如果你想使用一些类的语法(并因此在生成的解析器),你需要用

@parser::header { 
import packageName.ExprData; 
} 

导入所有的人都在语法和我不知道的如何实例化你的意思是什么? exprData是这里的返回变量,所以你可以通过使用$ exprData引用它来指定它。只是形成我的头顶(也许这样的标签不能像这样使用:

expr OR expr   #OrExpr {$exprData=someFuncitonThatReturnsExprDataObject();}