Островная грамматика antlr3 - PullRequest
2 голосов
/ 01 апреля 2010

Что такое и как использовать «островную грамматику» в antlr3?

Ответы [ 2 ]

4 голосов
/ 02 апреля 2010

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

Настоящий вопрос в том, «Стоит ли вообще использовать островные грамматики?».

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

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

Недостатки:

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

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

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

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

YMMV.

1 голос
/ 01 апреля 2010

Ну, я не совсем уверен, что вы имеете в виду, но так как вы не упомянули, что вы написали до сих пор, я начну здесь:

http://www.antlr.org/wiki/display/ANTLR3/Island+Grammars+Under+Parser+Control

...