Ирония не будет анализировать 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': там, разбор должен быть успешным.

Другие вопросы по тегам