Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用CSharp3语言在ANTLR中更改解析器规则中的令牌类型_C#_Antlr_Antlr3 - Fatal编程技术网

C# 如何使用CSharp3语言在ANTLR中更改解析器规则中的令牌类型

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

我将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 -> ^(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; };

也许有比这更好的解决办法,但现在我只有这个。

如果我能知道为什么会投反对票,我将不胜感激。很明显,我不知道这个问题的答案,或者我不会问你是否可以“接受”你自己的答案,这将结束这个问题。