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

Antlr4 我可以对Lexial元素进行一次检查,而不是对许多解析器规则进行检查吗?,antlr4,Antlr4,一、 我试图将antlr4与语法一起使用,以实现idl文件应该遵循的一些检查。一条规则是关于名字的。规则如下: ID仅包含字母、数字和符号下划线 我以一封信开头 ID以字母或数字结尾 ID不是艾达、C、C++、java、IDL中的保留字 执行此检查的一种方法是编写一个函数,用于检查这些属性的字符串,并在每个具有ID的规则的出口侦听器中调用它。例如,在exitConst_decl()、exitInit_decl()、exitSimple_declarator()和许多其他位置中(参考IDL.

一、 我试图将antlr4与语法一起使用,以实现idl文件应该遵循的一些检查。一条规则是关于名字的。规则如下:

  • ID仅包含字母、数字和符号下划线
  • 我以一封信开头
  • ID以字母或数字结尾
  • ID不是艾达、C、C++、java、IDL
  • 中的保留字

执行此检查的一种方法是编写一个函数,用于检查这些属性的字符串,并在每个具有ID的规则的出口侦听器中调用它。例如,在
exitConst_decl()
exitInit_decl()
exitSimple_declarator()
和许多其他位置中(参考IDL.g4)。也许这是正确的方法。但是我正在考虑直接在词法元素
ID
上进行检查。但我不知道如何做到这一点,或者根本不知道这是否可行。

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

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