Что такое хороший генератор парсера для php? - PullRequest
15 голосов
/ 15 сентября 2010

Мне нужно разобрать небольшой «мини язык», который пользователи могут вводить на моем сайте.Мне было интересно, что аналоги lex и jacc или antlr для мира php.

Ответы [ 4 ]

6 голосов
/ 08 августа 2011

Пару лет назад я использовал LIME Parser генератор для PHP , и он уже был зрелым и стабильным.

Сам генератор парсера написан на PHP, который на самом деле не оченьне имеет значения в любом техническом смысле - поскольку нам требуется только, чтобы сгенерированный синтаксический анализатор был в PHP - но тем не менее мне нравится эта деталь.Это заставляет меня чувствовать себя менее извиняющимся из-за написания программного обеспечения на PHP; -)

РЕДАКТИРОВАТЬ:

Я должен добавить:

  1. Где я написал "используется"точнее было бы сказать, что я «играл с».Я еще не написал никакого производственного кода, использующего Lime.Но я не вижу причин, чтобы этого не делать.

  2. «Пример калькулятора», предоставляемый с использованием lime, использует метод tokenize (), который очень далек от реальной замены мощности lex.Но если вам нужен настоящий токенизатор, то можно использовать lex на «переднем конце» для подачи токенов в известь на «заднем конце».

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

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

На мой взгляд, самый простой способ сделать это - создать один класс для каждого возможного типа синтаксиса (выражение, тест,цикл и т. д.).

Затем в каждом классе кодируйте следующие методы:

  • один метод для определения по строке, если строка имеет заданный тип (a+bимеет тип 'выражение', if(b) нет)
  • один метод для "запуска" этого типа (a+b вернет a->run() + b->run(), а a->run() вернет значение)
0 голосов
/ 24 мая 2012

Я перенес Jison, клон Bison в javascript, на php.Результатом является убийственный синтаксический анализатор, способный обрабатывать очень простые и очень сложные лексические операции / синтаксический анализ.Теперь это часть Jison, но в моей ветке есть несколько обновлений - https://github.com/robertleeplummerjr/jison.Файлы находятся здесь - https://github.com/robertleeplummerjr/jison/tree/master/ports/php

Посмотрите readme на этой странице, вы одновременно создаете javascript и php parser, которые способны выполнять одинаковые или разные действия.COOL!

0 голосов
/ 15 сентября 2010
...