通过一种替代方法获取令牌的名称

时间:2019-01-14 12:05:51

标签: antlr4

现在,如果令牌仅包含一种替代方式,例如ANTLR,则ANTLR不会返回Lexer令牌名称。令牌SUZY : 'Suzy'; 'Suzy'的代码将在解析树中进行编码。

现在,我使用令牌名称来编码一些有用的信息,例如SUZY_GENDER_FEMALE : 'Suzy';

到目前为止,即使令牌仅包含一个替代方案,我也找到了两种解决方案来获取令牌名称:

  1. 在令牌中重复相同的替代方法:SUZY_GENDER_FEMALE : 'Suzy' | 'Suzy';
  2. 使用fragment关键字:
SUZY_GENDER_FEMALE : SUZY_FRAGMENT;
fragment SUZY_FRAGMENT : 'Suzy';

这两种解决方案均有效,但并不理想。我一直在研究ANTLR实现,以一种替代方式更改令牌的行为,以便返回其名称,但代码相当复杂,尽管更改可能很容易,但仍需要一些时间。

有人会知道在代码中的什么地方吗? (也许就像在适当位置添加一行一样容易),或者我滥用令牌名称,应该使用其他ANTLR机制来获取所需的信息吗?

1 个答案:

答案 0 :(得分:2)

您的词法分析器具有静态的(2000,7,1) shape。尝试一下:

VOCABULARY