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



我想解析Smalltalk。
通常在表达式序列中,它们需要介于两者之间的 PERIOD 标记 (.( 作为分隔符,就像 java 中的 ';" 一样。 表达式本身不需要句点。 因此,我在表达式规则中匹配此句点:

expressions : expression (PERIOD expression)*;

并且特定表达式的不同子规则本身与 PERIOD 不匹配。

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

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

如何处理这种情况?

也许注入一个句号。在"原始"规则中,告诉词法分析器接下来注入 PERIOD 令牌。但是怎么做呢?

或者这种情况有更好的解决方案吗?

弗兰克

也许是这样的:

expressions
: start_expression* expression '.'?
;
start_expression
: expression '.'
| pragma
;
expression
: assignment
| pragma
;
assignment
: ID ':=' NUMBER
;
pragma
: '<' ID ':' ID '>'
;

相关内容

  • 没有找到相关文章

最新更新