Использование lex и Yacc для разбора php - PullRequest
1 голос
/ 26 июля 2011

Я хочу создать парсер php. Я думал об использовании lex / yacc для этой задачи.

это хорошая идея? или есть лучшие способы?

где я могу найти уже созданный lex / yacc для языка php. или хотя бы грамматик?

Ответы [ 3 ]

2 голосов
/ 26 июля 2011

См. Zend / zend_language_parser.y.

0 голосов
/ 24 мая 2012

Вы можете увидеть rphp_grammar.y в github rphp_grammar rphp_grammar

0 голосов
/ 26 июля 2011

Смотрите наш PHP интерфейс . Это не построено с использованием традиционных LEX и YACC, но имеет преимущество, заключающееся в огромных усилиях по созданию надежного синтаксического анализатора и тестировании с жестким ударом в течение нескольких лет. Используя полностью разработанную грамматику, он анализирует полный PHP5 (это сложно, язык плохо определен), включая сбор всех подробностей о интерполированных строковых значениях, автоматически создает AST и может распечатывать AST обратно до полностью корректного макета, сохраняющего исходный текст PHP, включая комментарии.

Неизменно есть жизнь за парсингом. и необходимы инструменты для поддержки анализа или модификации кода для достижения реальной цели. Механизм, лежащий в основе интерфейса PHP, DMS Software Reengineering Toolkit , обеспечивает LEX- и YACC-подобный механизм, который мы используем, и дополнительно предоставляет возможность процедурной навигации / проверки / изменения AST, предоставляет источник -переписать правила переписывания для сопоставления с образцом и / или преобразования кода, поддерживает построение таблиц символов и обеспечивает среду управления и анализа потока данных. Благодаря этому механизму гораздо проще сосредоточиться на выполнении работы, чем пытаться внедрить такой механизм ad hoc по мере необходимости. (DMS фактически обрабатывает множество языков, используя внешние интерфейсы в качестве средства интеграции).

...