Java 如何限制antlr3中令牌的长度?
我正在尝试使用antlr构建一个编译器,现在我想将我的语言中标识符的长度限制在9以内 我的代码现在如下所示:Java 如何限制antlr3中令牌的长度?,java,compiler-construction,antlr,antlr3,Java,Compiler Construction,Antlr,Antlr3,我正在尝试使用antlr构建一个编译器,现在我想将我的语言中标识符的长度限制在9以内 我的代码现在如下所示: IDENTIFIER: CHAR(CHAR|INT)*; 其中CHAR和INT都是片段。我想知道是否有什么方便的方法来实现我的目标,而不是使用以下方法: IDENTIFIER: CHAR(CHAR|INT)(CHAR|INT)...(CHAR|INT);//repeate (CHAR|INT) 8 times. 谢谢你的帮助 您应该在lexer完成后使用单独的检查来实现这一点。如果您
IDENTIFIER: CHAR(CHAR|INT)*;
其中CHAR
和INT
都是片段。我想知道是否有什么方便的方法来实现我的目标,而不是使用以下方法:
IDENTIFIER: CHAR(CHAR|INT)(CHAR|INT)...(CHAR|INT);//repeate (CHAR|INT) 8 times.
谢谢你的帮助 您应该在lexer完成后使用单独的检查来实现这一点。如果您试图验证lexer中标识符的长度,则包含
Identifier2Long
的输入可能会执行以下操作:
标识符
并通过丢弃I
进行恢复Identifier2
并通过丢弃d
进行恢复fire2long
解析为标识符,并将其作为下一个标记返回您可以通过重写来实现检查。您可能想看看这个问题。有一个关于语义谓词的示例,它的示例与您所问的类似。@nClass谢谢,我来看看。