我在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
时,rulenames的任何原因都不同?
非常感谢
答案 0 :(得分:1)
文字标记名称仅在非常有限的情况下使用,其中满足以下条件的所有:
tokenNames
数组中显示该字符串文字。回答你的问题:
TRY
规则在您的问题中缩写(即您的实际语法包含规则的谓词或操作),或者语法中某处的另一个词法分析器规则使用右侧的'try'
Try
而不是TRY
,那么它将在Try
数组中显示为tokenNames
。tokenNames
数组使用规则名称而不是文字。