在编译器中定义除保留字之外的变量名

发布于 2024-12-09 03:14:41 字数 553 浏览 0 评论 0原文

我正在尝试使用 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 是变量名称的规则。

谢谢你,如果有什么不清楚的地方可以问我。

I am trying to do a lexer for a subset of Java with JavaCC. And a variable name can be any combination of letter, digit and _, beginning with a letter. I have only one problem, reserved words (such as int, new, ...) can not be used as a variable name and I was wondering how to declare this. Right now I have this where the reserved words are declared first, and then the rule for variable names, is it enought and then it will be to the parser to deal with it ?

//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 is the rule for variable name.

Thank you and ask me if something is not clear.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

注定孤独终老 2024-12-16 03:14:41

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

JavaCC TokenManager 教程 中记录了此行为。 JavaCC FAQ 对此进行了解释此处

The JavaCC lexer chooses the first definition that gains the longest match, so your definition should be sufficient.

This behavior is documented in the JavaCC TokenManager Tutorial. The JavaCC FAQ explains it here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文