0

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

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

IDENTIFIER: CHAR(CHAR|INT)*;

whereCHARINT都是片段。我想知道是否有任何方便的方法可以让我实现我的目标,而不是使用这个:

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

感谢帮助。

4

1 回答 1

1

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

  1. Identifier通过丢弃I.
  2. dentifier2通过丢弃d.
  3. ...更多
  4. 最后,成功解析fier2Long为标识符并将其作为下一个令牌返回

您可以通过覆盖来实现检查Lexer.nextToken

于 2013-04-02T13:49:58.300 回答