我正在使用带有语言CSharp3的ANTLR 3.3。
在我的令牌类型中,我有一个名为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。我尝试了一些选项但没有一个成功。
感谢。
答案 0 :(得分:0)
我发现解决方案是执行以下操作:
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; };
在此处添加此项,以防万一其他人面临同样的问题。
但是,更改不属于支票的令牌类型仍然无法解决。一旦我知道如何做到这一点,就会更新这个答案。
也是。使用{(object)adaptor.Create(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; };
可能有一个比这更好的解决方案,但现在这就是我所拥有的。