我正在尝试使用 antlr 构建编译器,现在我想将我的语言中的标识符长度限制为小于 9。
我的代码现在看起来像这样:
IDENTIFIER: CHAR(CHAR|INT)*;
whereCHAR
和INT
都是片段。我想知道是否有任何方便的方法可以让我实现我的目标,而不是使用这个:
IDENTIFIER: CHAR(CHAR|INT)(CHAR|INT)...(CHAR|INT);//repeate (CHAR|INT) 8 times.
感谢帮助。
我正在尝试使用 antlr 构建编译器,现在我想将我的语言中的标识符长度限制为小于 9。
我的代码现在看起来像这样:
IDENTIFIER: CHAR(CHAR|INT)*;
whereCHAR
和INT
都是片段。我想知道是否有任何方便的方法可以让我实现我的目标,而不是使用这个:
IDENTIFIER: CHAR(CHAR|INT)(CHAR|INT)...(CHAR|INT);//repeate (CHAR|INT) 8 times.
感谢帮助。
您应该在词法分析器完成后使用单独的检查来实现这一点。如果您尝试在词法分析器中验证标识符的长度,则输入包含Identifier2Long
可能会执行以下操作:
Identifier
通过丢弃I
.dentifier2
通过丢弃d
.fier2Long
为标识符并将其作为下一个令牌返回。您可以通过覆盖来实现检查Lexer.nextToken
。