Я ищу способ получить поддержку Flex/Bison (или Lex/Yacc, et al.) в PHP. В частности, я реализую логический синтаксический анализатор запросов в веб-интерфейсе и предпочитаю хранить все операции внутри PHP (в отличие от вызова парсера C или передачи данных на Python и т.д.).
Функциональность Flex/Bison в PHP
Ответ 1
LIME Генератор Parser для PHP:
Завершить генератор парсера LALR (1) и (например, BISON или YACC), но это все сделано в PHP, а входная грамматика легче и удобнее обслуживать. Написать ваши действия в PHP. Создать PHP выходной код. Управляйте парсером с помощью PHP. Хотите сделать язык?
обновление:
Так как я написал выше, я вижу, что есть несколько других инструментов для генерации парсера, объявленных здесь:
http://wezfurlong.org/blog/2006/nov/parser-and-lexer-generators-for-php/
Не уверен, что они лучше поддерживаются в 2014 году, но я знаю Wez Furlong, он был оригинальным разработчиком PDO, и он очень хороший разработчик.
Ответ 2
Библиотека PEAR имеет классы LexerGenerator и ParserGenerator. Синтаксис LexerGenerator совместим с re2c, синтаксис ParserGenerator совместим с Генератор лимонного анализатора.
Ответ 3
Пробовали ли вы смотреть на генераторы парсеров PEG в PHP: https://github.com/maetl/php-peg?
Или подход комбинатор синтаксического анализа: http://qntm.org/locoparser?