2

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

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# 时遇到过这些问题?很抱歉,我无法提供更多信息。没有任何例外

4

1 回答 1

1

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

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

于 2012-03-10T12:24:12.953 回答