gpt4 book ai didi

antlr 4 - 警告 : rule contains an optional block with at least one alternative that can match an empty string

转载 作者:行者123 更新时间:2023-12-04 14:58:09 24 4
gpt4 key购买 nike

我使用 antlr v4 编写了一个 t-sql 解析器。
这个警告有问题吗?

"rule 'sqlCommit' contains an optional block with at least one alternative that can match an empty string"



我的代码:
sqlCommit: COMMIT (TRAN | TRANSACTION | WORK)? id?;

id:
ID | CREATE | PROC | AS | EXEC | OUTPUT| INTTYPE |VARCHARTYPE |NUMERICTYPE |CHARTYPE |DECIMALTYPE | DOUBLETYPE | REALTYPE
|FLOATTYPE|TINYINTTYPE|SMALLINTTYPE|DATETYPE|DATETIMETYPE|TIMETYPE|TIMESTAMPTYPE|BIGINTTYPE|UNSIGNEDBIGINTTYPE..........
;

ID: (LETTER | UNDERSCORE | RAUTE) (LETTER | [0-9]| DOT | UNDERSCORE)*

在我在 sqlCommit 中直接使用词法分析器规则 ID 而不是解析器规则 ID 之前的版本中。但是在将 ID 更改为 id 后会出现警告。

( 提示 如果您对 ID 和 id 感到困惑:我想使用解析器规则 id 而不是 ID,因为标识符可以是可能已经与其他词法分析器规则匹配的文字)

问候

编辑
在“280Z28”的帮助下,我解决了这个问题。在解析器规则中,“id”比需要的多一个斜杠:
位类型|创建|过程|
|AS|EXEC|输出|

所以| |包括解析器规则可以匹配空字符串。

最佳答案

从谷歌搜索:

ErrorType.EPSILON_OPTIONAL

Compiler Warning 154.

rule rule contains an optional block with at least one alternative that can match an empty string

A rule contains an optional block ((...)?) around an empty alternative.

The following rule produces this warning.

x  : ;
y : x?; // warning 154
z1 : ('foo' | 'bar'? 'bar2'?)?; // warning 154
z2 : ('foo' | 'bar' 'bar2'? | 'bar2')?; // ok

Since:
4.1



此警告描述的问题主要是性能问题。通过将零长度字符串包装在可选块中,您向语法中添加了一个完全不必要的决定(是否输入可选块),这很有可能迫使预测算法通过其最慢的路径。它类似于将 Java 代码包装在以下内容中:
if (slowMethodThatAlwaysReturnsTrue()) {
...
}

关于antlr 4 - 警告 : rule contains an optional block with at least one alternative that can match an empty string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26041293/

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