Java 如何限制antlr3中令牌的长度?

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完成后使用单独的检查来实现这一点。如果您

我正在尝试使用antlr构建一个编译器,现在我想将我的语言中标识符的长度限制在9以内

我的代码现在如下所示:

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谢谢,我来看看。