ANTLR3解析表达式

问题描述:

我想解析由antlr3一个表情,但遇到了一些和error.The以下是我的语法文件:ANTLR3解析表达式

grammar Expr; 

options { 
    output  = AST; 
    ASTLabelType = CommonTree; 
    language  = Java; 
    k =3; 
// backtrack=true; 
} 

tokens { 
    DIVIDE = '/' ; 
    PLUS = '+' ; 
    MINUS = '-' ; 
    STAR = '*' ; 
    MOD = '%' ; 
    AMPERSAND = '&' ; 
    TILDE = '~' ; 
    BITWISEOR = '|' ; 
    COMMA = ','; 
    DOT = '.'; 
    LPAREN = '(' ; 
    RPAREN = ')' ; 
    THRESHOLD = '>'; 
    EQUIValence = '='; 
    AND = 'AND' ; 
    OR = 'OR' ; 
    TRUE = 'TRUE'; 
    FALSE = 'FALSE'; 
    DOUBLE_QUOTE = '\"'; 
    SINGLE_QUOTE = '\''; 
} 


// LITERALS 
fragment 
Letter 
    : 'a'..'z' | 'A'..'Z' 
    ; 

fragment 
Digit 
    : 
    '0'..'9' 
    ; 

fragment 
Exponent 
    : 
    ('e' | 'E') (PLUS|MINUS)? (Digit)+ 
    ; 

Number 
    : 
    (Digit)+ (DOT (Digit)* (Exponent)? | Exponent)? 
    ; 

fragment 
UnquotedString 
    : 
     (~(SINGLE_QUOTE|DOUBLE_QUOTE|' '|'\t'|'\n'|LPAREN|RPAREN|COMMA))+ 
    ; 

fragment 
QuotedLiteral 
    : 
    DOUBLE_QUOTE (~(DOUBLE_QUOTE|'\\') | ('\\' .))* DOUBLE_QUOTE 
    ; 

Parameter 
    : 
    UnquotedString | QuotedLiteral 
    ; 

WS : (' '|'\r'|'\t'|'\n'|'\u000C')* {$channel=HIDDEN;} 
    ; 


/********************************************rule******************************************/ 
searchCondition 
    : 
    // subCondition ((AND | OR) subCondition)? EOF? 
    andExpr (OR^ andExpr)* 
    ; 

andExpr 
    : 
    subCondition (AND^ subCondition)* 
    ; 

subCondition 
    : 
     LPAREN searchCondition RPAREN 
    | atom 
    ; 

atom returns [QueryBuilder result] 
    : 
    //p0=expression (comparisonOperator expression)? 
    p0=expression 
    { 
     $result = $p0.result; 
    }   
    ; 

comparisonOperator 
    : 
    THRESHOLD | EQUIValence 
    ; 

expression returns [QueryBuilder result] 
    : 
    //p0=subExpression (binaryOperator subExpression)* 
    p0=subExpression 
    ; 

subExpression returns [QueryBuilder result] 
    : 
     p0=Parameter 
    ; 

当输入QQ OR (UU AND WW) OR XX,解析结果是不完整的对不对括号后的内容没有匹配。

enter image description here

+1

为什么不只是看各种语法中的许多表达式规则之一。支持表达式的语言的每种语法都有这样的规则。 –

最后AST似乎是罚款。这只是antlworks的解释功能,无法为您显示。正如它所说:“它不运行动作或评估句法谓词”。虽然,你没有明确指出,但你有一个递归(searchCondition-> andExpr-> subCondition-> searchCondition)。

你试过调试器吗? 由此产生的AST将如下所示: enter image description here