繁体   English   中英

Antlr4语法围绕字符串可选括号

[英]Antlr4 grammar optional brackets around string

我正在尝试编写一个语法来评估一个方程式,该方程式可能会或可能不会被括号括起来。 前 -

  1. (不是str1匹配'你好')
  2. NOT(str1匹配'hello')
  3. (NOT(str1匹配'hello'))
  4. NOT str1匹配'hello'

在我的规则中,我有

clause
: expression EOF
;

expression
 :
   LPAREN expression RPAREN                            #parenExpression
 | isNumeric                                     #isNumericExpression
 | leftSide IS NOT? NULL                               #nullExpression
 | compare                                           #comparatorExpression
 | NOT                                                 #notExpression

;


compare : NOT? LPAREN? NOT? leftSide op=comparator rightSide RPAREN? ;

现在,这有几个问题。

  1. 我不检查左右括号是否匹配。
  2. 条款中最多只有一个。

任何有关如何为这些规则编写语法的帮助都会非常有用。

提前致谢!

从概念上讲,表达为(典型地)或者复合物, ,递归的,或简单的:

expression
   : LPAREN expression RPAREN                 #parenExpression
   | NOT expression                           #notExpression
   | simpleExpression                         
   ;

simpleExpression
   : isNumeric                                #isNumericExpression
   | leftSide IS NOT? NULL                    #nullExpression
   | leftSide op rightSide                    #comparatorExpression
   ;

第一个复合alt允许表达式周围的任何级别的平衡括号。 第二个允许一个或多个NOT s在任何表达式之前。

简单的alts代表表达式的最基本形式。

所以, (NOT (str1 matches 'hello'))将匹配

parenExpression - > notExpression - > parenExpression - > comparatorExpression

当然,这两条规则可以合二为一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM