Antlr4 语法可选括号括起字符串
Antlr4 grammar optional brackets around string
我正在尝试编写一个语法来计算一个方程式,该方程式可能被括号括起来,也可能不被括号括起来。前-
- (不匹配 str1 'hello')
- 不(str1 匹配 'hello')
- (不(str1 匹配 'hello'))
- 不匹配 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? ;
现在,这有几个问题。
- 我不检查左右括号是否匹配。
- 子句中最多有一个NOT。
任何有关如何为这些规则编写语法的帮助都将非常有帮助。
提前致谢!
从概念上讲,表达式(通常)要么是复杂的,即,要么是递归的,要么是简单的:
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
.
当然,这两个规则可以合二为一。
我正在尝试编写一个语法来计算一个方程式,该方程式可能被括号括起来,也可能不被括号括起来。前-
- (不匹配 str1 'hello')
- 不(str1 匹配 'hello')
- (不(str1 匹配 'hello'))
- 不匹配 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? ;
现在,这有几个问题。
- 我不检查左右括号是否匹配。
- 子句中最多有一个NOT。
任何有关如何为这些规则编写语法的帮助都将非常有帮助。
提前致谢!
从概念上讲,表达式(通常)要么是复杂的,即,要么是递归的,要么是简单的:
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
.
当然,这两个规则可以合二为一。