所以,我正在尝试解析一些简单的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#之前遇到过这些问题?对不起,我无法提供更多信息。没有任何例外
答案 0 :(得分:1)
当我尝试你的代码时,解析确实是不成功的。错误(在parseTree.ParserMessages
中)位于第一行的末尾,错误消息为Invalid character: ''.
,其中引号之间的字符为\r
。
嗯,似乎\r
不被视为空格,所以我们需要修改语法。在语法中,有一个方法SkipWhitespace()
,它包含switch
中的空白字符列表。如果你只是在那里添加case '\r':
,解析应该会成功。