带条件缺少分隔符的Antlr4表达式
我想解析Smalltalk。带条件缺少分隔符的Antlr4表达式,antlr4,Antlr4,我想解析Smalltalk。 通常在表达式序列中,它们之间需要一个句点(.)作为分隔符,如“;”在java中。 表达式本身不需要句点。 因此,我在表达式规则中匹配此句点: 表达式:表达式(句点表达式)* 而特定表达式的不同子规则本身并不匹配句点 但是,有一种特殊类型的表达式调用本机库: 当后面跟着另一个表达式时,周期出乎意料地不需要 这种情况如何处理 也许注射一段时间。在“primitive”规则中,告诉lexer接下来注入一个句点标记。但是怎么做呢 还是有更好的解决方案 弗兰克也许是这样的:
通常在表达式序列中,它们之间需要一个句点(.)作为分隔符,如“;”在java中。 表达式本身不需要句点。 因此,我在表达式规则中匹配此句点:
表达式:表达式(句点表达式)*代码>
而特定表达式的不同子规则本身并不匹配句点
但是,有一种特殊类型的表达式调用本机库:
当后面跟着另一个表达式时,周期出乎意料地不需要
这种情况如何处理
也许注射一段时间。在“primitive”规则中,告诉lexer接下来注入一个句点标记。但是怎么做呢
还是有更好的解决方案
弗兰克也许是这样的:
expressions
: start_expression* expression '.'?
;
start_expression
: expression '.'
| pragma
;
expression
: assignment
| pragma
;
assignment
: ID ':=' NUMBER
;
pragma
: '<' ID ':' ID '>'
;
表达式
:启动表达式*表达式“”?
;
起始表达式
:表达式“.”
|布拉格马
;
表达
:分配
|布拉格马
;
分配
:ID':='编号
;
布拉格马
: ''
;
当您说不需要周期时,它是不允许的还是可选的?而
本身可以是一个完整的表达式,还是后面必须跟一个表达式?哦,是的,不要让表达式跟(剩余的第一个*),而是让它跟(开始*最后一个)。这就解决了问题。谢谢你的课。