Обновление “Введения в ANTLR”

Добавилось:

  1. Подключение порта Antlr на .Net в Visual Studio
  2. Использование AST в Antlr
  3. Всякие мелкие правки

Скачать можно тут:

По примерам. Все примеры делались в VS 2010 (оттуда solution) и для .Net 4. По идее никаких внешних зависимостей не требуют (все библиотеки вложены в проект) – т.е. запускаете и все собирается.

Сейчас вложены 4 проекта примеров, но готовы только первые 3:

  • Sample1 – пример простого парсера-валидатора (только проверяет текст по грамматике, ничего не генерирует на выход)
  • Sample2 – парсер и генерация основанная на использовании действий и атрибутов
  • Sample3 – пример использования AST.
  • Sample 4 (тот самый не готовый) – использование StringTemplates.

P.S. Как обычно жду откликов и замечаний

This entry was posted in Учеба and tagged . Bookmark the permalink.

19 Responses to Обновление “Введения в ANTLR”

  1. heeepi says:

    Миш, пока не до конца дочитал и осознал, но возник вопрос, а чем эта штука отличается/лучше/хуже Common Compiler Infrastructure (http://ccimetadata.codeplex.com/)?
    Для анализа .NET кода, тот же Stylecop вроде как ее и использует.

    По StringTemplates могу сказать, что штука очень даже классная. Не без своих косяков и особенностей, но пользоваться можно достаточно удобно и быстро. Если не нужна какая то очень сложная кодогенерация, то самое то.
    Было печально, что для шаблонов StringTemplates нет нормального редактора, но я его написал буквально за вечер, так что стало работать приятней.

    • Ну вообще это радикально разные вещи.

      CCI – это API к MSIL. Он нужен чтобы генерировать и анализировать готовые .Net сборки.
      Ничего связанного с парсингом исходных языков там отродясь не было (даже в примерах они используют самописные парсеры).

      StyleCop может и использует CCI, но зачем – ума не приложу. Потому как у StyleCop, на сколько я изучал его – свой собственный парсер, генерирующий свой AST. Анализировать IL там нет необходимости.
      Ты не перепутал с FxCop?

      Antlr – это генератор парсеров, т.е. он используется для создания фронтенд-части компилятора. CCI может использоваться для создания бэкенда (генератора).

    • Ну а по поводу StringTemplates я не вижу там радикальной разницы ни с одним шаблонизатором, тем же T4.
      Его единственный плюс при использовании с Antlr – наличие интеграции “из коробки”

      А редакторы есть, но весьма ограниченные. Для T4 оникуда функциональнее.

  2. Vova says:

    отличные статьи. Жаль что еще не до конца написанно)

  3. Vova says:

    Скачал с оф.сайта Visual studio С#. В пункте “Компоненты интеграции в Visual Studio от Sam Harwell ” в “Tools\Extension Manager” надо установить компоненты “ANTLR Language Support “и”stringtemplate”. Вводя в поис ни первое не второе ненаходит:/
    Чтос делатЬ?

    • Как вариант, скачать и поставить руками
      http://visualstudiogallery.msdn.microsoft.com/25b991db-befd-441b-b23b-bb5f8d07ee9f
      http://visualstudiogallery.msdn.microsoft.com/5ca30e58-96b4-4edf-b95e-3030daf474ff

      Только вот меня смущает что именно вы поставили – эти компоненты с Express версией работать не будут (А судя по названию, вы выкачали именно Express).

      Вообще говоря, эти компоненты обеспечивают только подсветку синтаксиса. Т.е. создавать грамматику можно например в AntlrWorks, а в студии уже писать все остальное.

      • Vova says:

        Никогда не работал с Студио и неочень опытен, так как новичёк в программировании.
        Еще раз скажу что статьи написанны замечательно и мне как новичку всё было понятно (почти=). Жду продолжения!!!

        • Увы, пока обещать продолжения не могу – очень загружен.

          Но буду весьма признателен, если вы напишите, где именно были сложности с пониманием (или где нашлись неточности, ….).

  4. Dmitrij says:

    Здравствуйте, Михаил !
    Решил попробовать ANTLR & vs 2010 с Вашим примером. Namespaces “GrammarRule”, “GrammarRuleAttribute” компилятору в моем C# vs 2010 неизвестны.Они должны быть сгенерированы ANTLRWorks ?

    • Дмитрий, добрый день.
      Что такое GrammarRule я с ходу не скажу, а вот GrammarRuleAttribute, это ничто иное, как атрибут полное имя которого Antlr.Runtime.GrammarRuleAttribute и находится он в сборке Antlr3.Runtime.dll

      Кстати, у меня сразу вопрос – вы пользуетесь только PDF-документом или пробуете и приложенный пример http://sdrv.ms/QfTqy9 (он содержит сразу все подключенные библиотеки и уже подправленный файл проекта – для автоматической сборки)

      • Dmitrij says:

        Я не очень понял имя файла, которыи Вы здесь указали.
        Но я скачал ваш архив с 4-мя примерами и его пытался запустить.

        • >> Я не очень понял имя файла, которыи Вы здесь указали.
          А что именно не понятно?
          Я указал имя сборки, которую нужно подключить к проекту, чтобы стало доступно пространство Antlr.Runtime. Это сборка Antlr3.Runtime.dll.

          В том проекте, который выложил я, все уже подключено. По идее, вам достаточно только его распакавать и собрать. Может, при сборке были еще ошибки?

          • Dmitrij says:

            Sample 2 не строится.
            Неизвестная ошибка при построениии: строка 108 <AntlrClassGenerationTask

            • Это очень странно. Ведь Sample1 строится, а он практически идентичен Sample2.
              Понятно, что валится на вызове задачи из Antlr3.targets. Но почему валится – загадка.

              Давайте попробуем пойти немного окольным путем. Попробуйте собрать проект не из студии, а с помошью MSBuild. Можно хоть только второй проект, хоть весь солюшен.

  5. Dmitrij says:

    Я попробовал, результат – тот же.
    Собственно, я уж не помню, почему именно второй пример я упомянул. С первым – та же история.

    • Хм… Значит надо разбираться.

      Дмитрий, можете попробовать сделать следующее:
      1. Зайти в папку Sample1
      2. Удалить оттуда подпапки bin, GeneratedFiles и obj
      3. Запустить из Sample1 команду: msbuild /t:Rebuild /v:diag Sample1.csproj >log.txt
      4. Прислать полученный лог мне на: mihail_romanov ( собака ) live.ru

  6. Очень полезный материал, пригодился в работе для создания транслятора пользовательского языка для фильтрации данных. Спасибо, Миша!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s