我使用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 |输出|
所以| | 包括解析器规则可以匹配空字符串.