Как написать ANTLR-парсер для JSP / ASP / PHP-подобных языков? - PullRequest
6 голосов
/ 17 сентября 2009

Я новичок в генераторах синтаксических анализаторов и мне интересно, как могла бы выглядеть грамматика ANTLR для встроенного языка, такого как JSP / ASP / PHP, но, к сожалению, на сайте ANTLR нет таких файлов грамматики.

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

Например, следующий фрагмент должен быть размечен как что-то вроде: AnyText, BlockBegin, Keyword, BlockEnd, AnyText.

lorem ipsum KEYWORD dolor sit <% KEYWORD %> amet

Может быть, есть и другой генератор парсеров, который лучше подходит для моих нужд. До сих пор я пробовал только ANTLR из-за его огромной популярности здесь в stackoverflow:)

Заранее большое спасибо!

Ответы [ 2 ]

3 голосов
/ 28 сентября 2009

Я не могу говорить за ANTLR, так как использую другой лексер / парсер ( DMS Software Reengineering Toolkit , для которого я разработал именно такие JSP и PHP лексеры / парсеры. (ASP isn ' не так, как вы заметили в своем вопросе).

Но основная идея заключается в том, что лексеру нужны лексические режимы для распознавания, когда вы выбираете «любой текст» и когда вы обрабатываете «настоящий» текст на языке программирования. Итак, вам нужен начальный лексический режим, скажем, HTML, работа которого заключается в усвоении HTML текст, и когда он сталкивается с переходом в PHP, переключает режимы. Вам также нужен режим PHP, который собирает все токены PHP, и переключается обратно в режим HTML, когда встречаются символы перехода. Вот эскиз:

%%HTML -- mode
#token HTMLText "~[]* \< \% "
   << (GotoPHPMode) >>

%%PHP -- mode
#token KEYWORD "KEYWORD"
...
#token '%>'  "\%\>"
   << (GotoHTMLMode) >>

Ваш генератор лексера, вероятно, имеет какую-то возможность переключения режимов что вам придется использовать вместо этого. И вы, вероятно, найдете это Лексировать HTML-вещи сложнее, чем кажется (вы должны волноваться о тегах

1 голос
/ 24 января 2011

Я сталкивался с этим проектом http://code.google.com/p/phpparser/ который также содержит файл грамматики ANTLR для разбора PHP: http://code.google.com/p/phpparser/source/browse/grammar/Php.g

Надеюсь, это поможет.

...