Ирония не будет анализировать C# с помощью иронии C# грамматики
Итак, я пытаюсь разобрать простой код C#, чтобы узнать, как использовать 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 - грамматика C# от Иронии. Кто-нибудь сталкивался с такими проблемами при разборе C# с грамматикой Иронии раньше? Извините, я не могу предоставить больше информации. Там нет никаких исключений
1 ответ
Когда я попробовал твой код, разбор действительно был неудачным. И ошибка (в parseTree.ParserMessages
) был в конце первой строки с сообщением об ошибке Invalid character: ''.
где символ между кавычками \r
,
Хм похоже \r
не считается пробелом, поэтому нам нужно изменить грамматику. В грамматике есть метод SkipWhitespace()
, который содержит список пробельных символов в switch
, Если вы просто добавите case '\r':
там, разбор должен быть успешным.