带条件缺少分隔符的Antlr4表达式

带条件缺少分隔符的Antlr4表达式,antlr4,Antlr4,我想解析Smalltalk。 通常在表达式序列中,它们之间需要一个句点(.)作为分隔符,如“;”在java中。 表达式本身不需要句点。 因此,我在表达式规则中匹配此句点: 表达式:表达式(句点表达式)* 而特定表达式的不同子规则本身并不匹配句点 但是,有一种特殊类型的表达式调用本机库: 当后面跟着另一个表达式时,周期出乎意料地不需要 这种情况如何处理 也许注射一段时间。在“primitive”规则中,告诉lexer接下来注入一个句点标记。但是怎么做呢 还是有更好的解决方案 弗兰克也许是这样的:

我想解析Smalltalk。
通常在表达式序列中,它们之间需要一个句点(.)作为分隔符,如“;”在java中。 表达式本身不需要句点。 因此,我在表达式规则中匹配此句点:

表达式:表达式(句点表达式)*

而特定表达式的不同子规则本身并不匹配句点

但是,有一种特殊类型的表达式调用本机库:

当后面跟着另一个表达式时,周期出乎意料地不需要

这种情况如何处理

也许注射一段时间。在“primitive”规则中,告诉lexer接下来注入一个句点标记。但是怎么做呢

还是有更好的解决方案


弗兰克也许是这样的:

expressions
 : start_expression* expression '.'?
 ;

start_expression
 : expression '.'
 | pragma
 ;

expression
 : assignment
 | pragma
 ;

assignment
 : ID ':=' NUMBER
 ;

pragma
 : '<' ID ':' ID '>'
 ;
表达式
:启动表达式*表达式“”?
;
起始表达式
:表达式“.”
|布拉格马
;
表达
:分配
|布拉格马
;
分配
:ID':='编号
;
布拉格马
: ''
;

当您说不需要周期时,它是不允许的还是可选的?而
本身可以是一个完整的表达式,还是后面必须跟一个表达式?哦,是的,不要让表达式跟(剩余的第一个*),而是让它跟(开始*最后一个)。这就解决了问题。谢谢你的课。