如何使用 ANTLR 4 转义括号字符
How do I escape brackets character with ANTLR 4
我想从 TEXT 中删除“(”和“)”。我怎样才能逃脱'('和')'?
( 和 \\( 没用。
我希望“(”和“)”被识别为决策优先级的运算符。
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 ;
这个return如下
» 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)))
谢谢
我通过非词法分析器和解析器解决了这个问题。
监听器如何处理解析结果是个问题。
我想从 TEXT 中删除“(”和“)”。我怎样才能逃脱'('和')'? ( 和 \\( 没用。
我希望“(”和“)”被识别为决策优先级的运算符。
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 ;
这个return如下
» 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)))
谢谢
我通过非词法分析器和解析器解决了这个问题。 监听器如何处理解析结果是个问题。