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