Irony不会使用Irony提供的C#语法来解析C#

时间:2012-03-10 11:55:44

标签: c# parsing irony

所以,我正在尝试解析一些简单的C#代码来学习如何使用Irony。我正在使用Irony示例中包含的C#语法,并使用示例程序集加载代码。关于反讽的文件似乎很少。这是我要解析的完整资源:

using System;

namespace N
{
    class Test
    {
       public int A(int x)
       {
           return x+1;
       }
    }
    class Test2
    {
        public string hello = "world";
        private int _T = 0;
        private Test _actor = new Test();
        public void B()
        {
            Console.WriteLine(hello+": "+_actor.A(_T++));
        }
    }
}

解析代码:

 string src = File.ReadAllText("testcs.cs");
 LanguageData language = new LanguageData(g);
 Parser parser = new Parser(language);
 ParseTree parseTree = parser.Parse(src);
 ParseTreeNode root = parseTree.Root;
 Console.WriteLine((root==null?"Parse tree unsuccessful!":"Parse tree created!"));

...其中g是来自Irony的C#语法。有没有人在使用Irony的语法解析C#之前遇到过这些问题?对不起,我无法提供更多信息。没有任何例外

1 个答案:

答案 0 :(得分:1)

当我尝试你的代码时,解析确实是不成功的。错误(在parseTree.ParserMessages中)位于第一行的末尾,错误消息为Invalid character: ''.,其中引号之间的字符为\r

嗯,似乎\r不被视为空格,所以我们需要修改语法。在语法中,有一个方法SkipWhitespace(),它包含switch中的空白字符列表。如果你只是在那里添加case '\r':,解析应该会成功。