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

时间:2013-04-02 08:58:49

标签: java compiler-construction antlr antlr3

我正在尝试使用antlr构建编译器,现在我想将我语言中标识符的长度限制为小于9。

我的代码现在看起来像这样:

IDENTIFIER: CHAR(CHAR|INT)*;

其中CHARINT都是片段。我想知道是否有任何方便的方式来实现我的目标而不是使用它:

IDENTIFIER: CHAR(CHAR|INT)(CHAR|INT)...(CHAR|INT);//repeate (CHAR|INT) 8 times.

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你应该在词法分析器完成后使用单独的检查来实现它。如果您尝试在词法分析器中验证标识符的长度,则包含Identifier2Long的输入可能会执行以下操作:

  1. 无法解析Identifier并通过放弃I来恢复。
  2. 无法解析dentifier2并通过放弃d来恢复。
  3. ......更多
  4. 最后,成功解析fier2Long作为标识符并将其作为下一个标记返回。
  5. 您可以通过覆盖Lexer.nextToken来实施检查。