小编fli*_*eid的帖子

antlr 4 - 警告:规则包含一个可选块,其中至少有一个替代方法可以匹配空字符串

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

"rule'sqlCommit'包含一个可选块,其中至少有一个替代方法可以匹配空字符串"

我的代码:

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)*
Run Code Online (Sandbox Code Playgroud)

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

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

问候

编辑 在"280Z28"的帮助下,我解决了这个问题.在解析器规则中,"id"是一个比需要更多的斜杠:BITTYPE | CREATE | PROC | | AS | EXEC |输出|

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

antlr antlr4

6
推荐指数
1
解决办法
2468
查看次数

标签 统计

antlr ×1

antlr4 ×1