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

Antlr4 expression with conditional missing separator

我想解析 Smalltalk。
通常在一系列表达式中,它们之间需要一个句号 (.) 作为分隔符,例如 ';'在 java。 单独的表达式不需要句点。 因此我在表达式规则中匹配这个句点:

expressions : expression (PERIOD expression)*;

并且具体表达式的不同子规则本身不匹配PERIOD

但是,有一种特殊类型的表达式调用本地库:
<primitive: ABC>

当这后面跟着另一个表达式时,令人惊讶的是不需要

遇到这种情况怎么办?

可能注入句点。在 "primitive" 规则中,告诉词法分析器接下来注入一个 PERIOD 标记。但是怎么办?

或者对于这种情况有更好的解决办法吗?

弗兰克

也许是这样的:

expressions
 : start_expression* expression '.'?
 ;

start_expression
 : expression '.'
 | pragma
 ;

expression
 : assignment
 | pragma
 ;

assignment
 : ID ':=' NUMBER
 ;

pragma
 : '<' ID ':' ID '>'
 ;