C# 如何使用CSharp3语言在ANTLR中更改解析器规则中的令牌类型
我将ANTLR 3.3与langage CSharp3一起使用 在我的标记类型中,我有一个名为WORD、UTTAR、PRADESH、UPABBR等的标记。我还有一个规则如下C# 如何使用CSharp3语言在ANTLR中更改解析器规则中的令牌类型,c#,antlr,antlr3,C#,Antlr,Antlr3,我将ANTLR 3.3与langage CSharp3一起使用 在我的标记类型中,我有一个名为WORD、UTTAR、PRADESH、UPABBR等的标记。我还有一个规则如下 specialSynonym5 : (UTTAR PRADESH)=>a=UTTAR b=PRADESH -> ^(SpecialSynonymNode ^(SynonymNode $a $b) ^(SynonymNode UPABBR)) | (UPABBR) => a=UPABBR
specialSynonym5 : (UTTAR PRADESH)=>a=UTTAR b=PRADESH -> ^(SpecialSynonymNode ^(SynonymNode $a $b) ^(SynonymNode UPABBR))
| (UPABBR) => a=UPABBR -> ^(SpecialSynonymNode^(SynonymNode $a) ^(SynonymNode UTTAR PRADESH))
| UTTAR;
| PRADESH;
我想做的是将令牌类型更改为WORD,以便在处理此规则后,令牌类型为WORD。我尝试了一些选择,但没有一个成功
谢谢。我发现解决方案是执行以下操作:
specialSynonym5 : (UTTAR PRADESH)=>a=UTTAR b=PRADESH { a.Type = WORD; } -> ^(SpecialSynonymNode ^(SynonymNode $a $b) ^(SynonymNode UPABBR))
| (UPABBR) => a=UPABBR { a.Type = WORD; } -> ^(SpecialSynonymNode^(SynonymNode $a) ^(SynonymNode UTTAR PRADESH))
| a=UTTAR { a.Type = WORD; };
| a=PRADESH { a.Type = WORD; };
在这里添加这个,以防其他人面临同样的问题
但是,更改不属于支票一部分的令牌的类型仍然让我感到困惑。一旦我知道怎么做,我会更新这个答案
我也知道。使用{(对象)适配器创建令牌。创建(单词“”)}。因此,该规则成为
specialSynonym5 : (UTTAR PRADESH)=>a=UTTAR b=PRADESH { a.Type = WORD; } -> ^(SpecialSynonymNode ^(SynonymNode $a $b) ^(SynonymNode {(object)adaptor.Create(WORD, "u.p.")} ))
| (UPABBR) => a=UPABBR { a.Type = WORD; } -> ^(SpecialSynonymNode^(SynonymNode $a) ^(SynonymNode {(object)adaptor.Create(WORD, "uttar")} {(object)adaptor.Create(WORD, "pradesh")}))
| a=UTTAR { a.Type = WORD; };
| a=PRADESH { a.Type = WORD; };
也许有比这更好的解决办法,但现在我只有这个。如果我能知道为什么会投反对票,我将不胜感激。很明显,我不知道这个问题的答案,或者我不会问你是否可以“接受”你自己的答案,这将结束这个问题。