带有条件缺失分隔符的 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 '>'
;
我想解析 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 '>'
;