我可以对Lexical元素进行一次检查,而不是对许多解析器规则进行检查吗?

时间:2014-09-29 12:55:57

标签: antlr4

我试图使用带有IDL.g4语法的antlr4来实现我们的idl文件应遵循的一些检查。关于名字的一条规则。规则如下:

  • ID仅包含字母,数字和单号下划线,
  • ID以字母开头,
  • ID以字母或数字结尾。
  • ID不是ADA,C,C ++,Java,IDL中的保留字

执行此检查的一种方法是编写一个函数来检查这些属性的字符串,并在退出侦听器中为每个具有ID的规则调用它。例如,exitConst_decl()exitInit_decl()exitSimple_declarator()以及更多地方的ID。(参见IDL.g4)。也许这是正确的方法。但我正在考虑将该检查直接放在词法元素ID上。但是不知道该怎么做,或者根本不可能。

1 个答案:

答案 0 :(得分:1)

在词法分析器中验证此类型的约束会使为无效标识符提供可用的错误消息变得更加困难。但是,您可以创建新的解析器规则identifier,并将各种解析器规则中对ID的所有引用替换为引用identifier

identifier
  : ID
  ;

然后,您可以将标识符验证逻辑放在单个方法enterIdentifier中,而不是当前引用ID的所有各种规则。