Как записать синтаксический анализатор ANTLR для JSP/ASP/PHP как языки?

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

Редактирование: Кроме того, из-за природы текущих оптимизирующих компиляторов (и Виртуальные машины, такие как CLR и JVM) может быть очень неправильно измерить скорость выполнения одних строк кода, так как измерение может влиять на скорость довольно много. Намного лучший подход должен был бы представить всю систему (или по крайней мере большие блоки) и проверка, где узкие места.

6
задан tux21b 17 September 2009 в 18:16
поделиться

1 ответ

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

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

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

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

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