gpt4 book ai didi

c# - 错误 - 词法分析器规则 'xxxx' 中的操作必须是单个最外层 alt 的最后一个元素

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:49 25 4
gpt4 key购买 nike

当我从 Antlr 3 升级到 Antlr 4 时,我删除了语法中的所有句法谓词。但是当我更改它时,出现标题中提到的错误。

这是修改后的代码

NUMBER 
:(
'0'..'9' ('.' '0'..'9'+)?
| '.' '0'..'9'+
)
(
E
(
M { $type = EMS; }
| X { $type = EXS; }
)
| P
(
X
| T
| C
)
{ $type = LENGTH; }
| C M { $type = LENGTH; }
| M
(
M { $type = LENGTH; }

| S { $type = TIME; }
)
| I N { $type = LENGTH; }

| D E G { $type = ANGLE; }
| R A D { $type = ANGLE; }

| S { $type = TIME; }

| K? H Z { $type = FREQ; }

| IDENT { $type = DIMENSION; }

| '%' { $type = PERCENTAGE; }

| // Just a number
)
;

这是我遇到的错误。 enter image description here

我看到了这个问题的答案here .但我无法理解这意味着什么。请给我一些指导。

编辑:

同样的错误出现在语法中。

    fragment    INVALID :;
STRING : '\'' ( ~('\n'|'\r'|'\f'|'\'') )*
(

'\''
| { $type = INVALID; }
)

| '"' ( ~('\n'|'\r'|'\f'|'"') )*
(
'"'
| { $type = INVALID; }
)
;

我无法将其更改为 ANTLR 4。这段代码中有什么新内容?请给我一个快速修复。

最佳答案

您的 NUMBER 规则已被大量手动左因式分解。实际上,它是产生 9 种不同类型标记的单个词法分析器规则。由于 ANTLR 3 词法分析器使用递归下降解析器进行预测的方式,可能会执行左因式分解。 ANTLR 4 使用完全基于 DFA 的词法分析器算法。您看到的错误是此更改的结果 - 由于 ANTLR 4 词法分析器不再是递归下降解析器,因此它们不再能够在任意点执行操作代码。

在 ANTLR 4 中编写上述规则的最有效方法是使用 ANTLR 3 中的“低效”语法。在 ANTLR 4 中,它不会很慢。

EMS
: NUMBER E M
;
EXS
: NUMBER E X
;
LENGTH
: NUMBER P X
| NUMBER P T
| NUMBER P C
| NUMBER C M
| NUMBER M M
| NUMBER I N
;
TIME
: NUMBER M S
| NUMBER S
;
ANGLE
: NUMBER D E G
| NUMBER R A D
;
FREQ
: NUMBER K? H Z
;
DIMENSION
: NUMBER IDENT
;
PERCENTAGE
: NUMBER '%'
;
NUMBER
: [0-9] ('.' [0-9]+)?
| '.' [0-9]+
;

关于c# - 错误 - 词法分析器规则 'xxxx' 中的操作必须是单个最外层 alt 的最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18456455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com