2016-01-13 113 views
0

我想解析由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

爲什麼不只是看各種語法中的許多表達式規則之一。支持表達式的語言的每種語法都有這樣的規則。 –

回答

0

最後AST似乎是罰款。這只是antlworks的解釋功能,無法爲您顯示。正如它所說:「它不運行動作或評估句法謂詞」。雖然,你沒有明確指出,但你有一個遞歸(searchCondition-> andExpr-> subCondition-> searchCondition)。

你試過調試器嗎? 由此產生的AST將如下所示: enter image description here