ANLTR4 中的令牌名称
本文关键字:令牌 ANLTR4 | 更新日期: 2023-09-27 18:30:31
>我在AnTLR4中有以下词法分析器规则
TRY: 'try';
FINALLY: 'finally';
EXCEPT: 'except';
IF: [i][f];
...
在 C# 中生成的代码是:
public static readonly string[] tokenNames = {
"<INVALID>", "TRY", "'finally'", "'except'", "IF", ... }
我的问题:
为什么 TRY 令牌的规则名称是
TRY
,而 FINALLY 令牌被命名为'finally'
。另外,我注意到
<INVALID>
后的第一个标记始终以大写形式命名当我们写
[i][f]
或if
时,规则名称的任何原因都不同?
多谢
文本令牌名称仅在满足以下所有条件的非常有限的情况下使用:
- 词法分析器规则的右侧只包含一个字符串文本(仅此而已,仅此而已)。
- 语法中只有一个规则由该字符串文本组成。如果两种不同模式下的两个不同规则使用相同的字符串文本,则它们都不会与该字符串文本一起出现在
tokenNames
数组中。
要回答您的问题:
TRY
规则要么在您的问题中缩写(即您的实际语法包含该规则的谓词或操作),要么在您的语法中的某个地方使用右侧的'try'
词法分析器规则。- 这些名称取自词法分析器规则名称。如果您的规则被命名为
Try
而不是TRY
,那么它将在tokenNames
数组中显示为Try
。 - 此规则不包含字符串文本,因此
tokenNames
数组使用规则名称而不是文本。