2010-04-01 3 views

ответ

4

Остров грамматика один, который лечит большая часть языка как кусок текста («вода») и выделяет часть интересующего слова для анализа, используя правила грамматики («остров»). Например, вы можете создать грамматику острова, чтобы выбрать все выражения, найденные в программе C#, и игнорировать объявления переменных/методов/классов и синтаксис оператора (if, while, ...).

Реальный вопрос: «Должны ли вы использовать островные грамматики?».

Положительные преимущества:

  • вы не должны писать полную, полную грамматику для языка, который вы хотите обработать.

Обратной:

  • Это не всегда легко выделить часть источника интереса. Например, Как вы гарантируете, что языковая грамматика не заберет блок кода, который закомментирован, если только ваша языковая грамматика не лексирует все комментарии в деталях? Пункт островной грамматики заключался в том, чтобы не вдаваться в такие детали, и все же здесь вы должны.

  • Вы можете использовать только грамматику острова, чтобы сосредоточиться на проблеме, как вы ее понимаете прямо сейчас. Если проблема движется, то ваша языковая грамматика, возможно, тоже придется сдвинуться, и это не всегда легко.

  • Наиболее интересные проблемы при манипулировании программой требуют, чтобы вы могли определять не только синтаксис (например, «синтаксический анализ»), но и создавать какое-то дерево для управления, но вы также сможете определить значение символов , С помощью грамматики на острове вы эффективно списали возможность сделать это (если вы не хотите включать весь синтаксис для блоков, деклараций и т. Д. ... внезапно это не островная грамматика, а небольшая грамматика континента) , И что действительно ограничивает то, что вы можете сделать.

Назовите меня предвзятым, но я делал такие вещи долгое время. Я считаю, что языковые грамматики действительно не так полезны. Альтернативой, которую я предлагаю, являются партизаны с амортизированными издержками на многих языках на основе общих фондов, а их называют DMS Software Reengineering Toolkit.

YMMV.

Смежные вопросы