定义变量名,但编译器中的保留字除外

时间:2011-10-10 05:12:03

标签: compiler-construction lexer javacc

我正在尝试使用JavaCC为Java的子集做一个词法分析器。变量名可以是字母,数字和_的任意组合,以字母开头。我只有一个问题,保留字(例如intnew,...)不能用作变量名,我想知道如何声明这个。现在我有这个首先声明保留字的地方,然后是变量名的规则,它是否应该然后解析器处理它呢?

//Reserved words
TOKEN:{
  < TOK_BOOLEAN : "boolean" > |
  < TOK_BREAK : "break" > |
  < TOK_CLASS : "class" >
}

TOKEN:{
  < TOK_ID : <LETTER> (<LETTER>|<DIGIT>|"_")+ > |
  < #DIGIT : ["0"-"9"] > |
  < #LETTER : ["a"-"z"] | ["A"-"Z"] >
}

TOK_ID是变量名称的规则。

谢谢你,问我有什么不清楚的地方。

1 个答案:

答案 0 :(得分:0)

JavaCC词法分析器选择获得最长匹配的第一个定义,因此您的定义应该足够了。

JavaCC TokenManager Tutorial中记录了此行为。 JavaCC FAQ解释了here