Островная грамматика antlr3
Что такое и как использовать "островную грамматику" в antlr3?
2 ответа
Грамматика острова - это та, которая рассматривает большую часть языка как сгусток текста ("вода") и выделяет интересующую часть языка для анализа с использованием правил грамматики ("остров"). Например, вы можете выбрать построение грамматики островов, чтобы выбрать все выражения, найденные в программе на C#, и игнорировать объявления переменных / методов / классов и синтаксис операторов (if, while, ...).
Реальный вопрос: "Стоит ли вообще использовать островные грамматики?".
Положительные преимущества:
- вам не нужно писать полную грамматику для языка, который вы хотите обработать.
Обратная сторона:
Не всегда легко выделить часть источника интереса. Например, как вы гарантируете, что грамматика острова не подхватывает закомментированный блок кода, если ваша грамматика острова не детализирует все комментарии подробно? Смысл грамматики острова состоял в том, чтобы не вдаваться в детали такого рода, и все же здесь вы должны это сделать.
Вы можете использовать грамматику острова только для того, чтобы сосредоточиться на проблеме, как вы ее понимаете. Если проблема движется, то и ваша грамматика острова тоже может измениться, и это не всегда легко.
Наиболее интересные проблемы в манипулировании программой требуют, чтобы вы были в состоянии определить не только синтаксис (например, "синтаксический анализ") и построить какое-то дерево для манипулирования, но также чтобы вы могли определить значение символов. С островной грамматикой вы фактически списали возможность сделать это (если только вы не хотите включить весь синтаксис для блоков, объявлений и т. Д.... ой вдруг это не островная грамматика, а небольшая грамматика континента), И это действительно ограничивает то, что вы можете сделать.
Назовите меня предвзятым, но я давно занимаюсь такими вещами. Я считаю, что островные грамматики на самом деле не так полезны. Альтернатива, которую я предлагаю, - это парсеры с амортизированной стоимостью для многих языков, основанные на общих принципах, и его называют DMS Software Reengineering Toolkit.
YMMV.
Ну, я не совсем уверен, что вы имеете в виду, но так как вы не упомянули то, что написали, я начну здесь:
http://www.antlr.org/wiki/display/ANTLR3/Island+Grammars+Under+Parser+Control