2017-02-09 218 views
1

我想從TEXT中刪除'('和')'。我如何逃避'('和')'? (和\\(沒有工作。如何使用ANTLR 4轉義括號字符

我想 '(' 和 ')' 被認可爲運營商決定優先級。

grammar Query; 

// Parser 

query: expr+ ; 

expr: NOT expr 
    | expr AND? expr 
    | expr OR expr 
    | REGEXP 
    | TEXT 
    | STRING 
    | LPAREN expr RPAREN 
    ; 


// Lexer 

LPAREN : '(' ; 
RPAREN : ')' ; 

AND: 'AND' ; 
OR: 'OR' ; 
NOT: 'NOT' ; 

TEXT : ~[()\n\r" ]+ ; 
STRING : '"' ('""'|~'"')* '"' ; // quote-quote is an escaped quote 
REGEXP : '/' (~'/')* '/' ; // quote-quote is an escaped quote 
WS : [ \t\r\n]+ -> skip ; 

這回如下

» grun Query query -tree 
(A AND B) OR C 
(query (expr (expr ((expr (expr A) AND (expr B)))) OR (expr C))) 

我需要

(query (expr (expr (expr (expr A) AND (expr B))) OR (expr C))) 

感謝

回答

-1

我通過不使用詞法分析器解析了這個問題。 監聽器如何處理分析結果是一個問題。