Ирония не будет анализировать C # с помощью иронии C # грамматики - PullRequest
2 голосов
/ 10 марта 2012

Итак, я пытаюсь разобрать некоторый простой код 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 Ответ

1 голос
/ 10 марта 2012

Когда я попробовал ваш код, синтаксический анализ действительно был неудачным. И ошибка (в parseTree.ParserMessages) была в конце первой строки с сообщением об ошибке Invalid character: ''., где символ между кавычками равен \r.

Хм, кажется, \r не считается пробелом, поэтому нам нужно изменить грамматику. В грамматике есть метод SkipWhitespace(), который содержит список пробельных символов в switch. Если вы просто добавите туда case '\r':, синтаксический анализ должен завершиться успешно.

...