Nov. 15th, 2016

stdray: (Default)


Хочу написать парсер поисковых запросов. Набор возможных операций мал: "и", "или", "не", группировка скобками (изменение приоритета), группировка кавычками1 (фразовый поиск), группировка кавычками2 (точное совпадение), пробел/табуляция/что-то еще - разделитель (он же implicit "и"), перевод строки - разделитель (он же implicit "или"), escape-символ (возможно, это будет '\').

Сложным мне представляется обработка ошибок. Пользователи будут вводить любую ерунду и удивляться любому поведению. Тут политика партии ещё не ясна: либо будем сыпать ошибки, либо достраивать до корректного запроса, либо и то и другое. Сыпать ошибки придётся, инфа под сотню, а значит они должны быть разумными и понятными. Это, как я понимаю, отсекает возможность применения парсер-комбинаторов и генераторов (TDOP, PEG, EBNF и прочих).

Выходит, что мне нужно ручками, кровью и потом писать лексер, выписывая автомат (регулярки не помогут) и все его состояния. Потом руками ходить по порожденной лексером коллекции токенов, с целью починить или внятно поругаться. И, наконец, руками же написать автомат парсера.

Что-то выглядит очень громоздко и скучно. Может, чего не знаю и есть короткий путь? Или, может, кто из вас видел красивые и компактные реализации чего-то подобного? В общем, я достаточно далек от разбора текста и надеюсь на любую помощь.


ЗЫ: зря я не читал дракона, да?

July 2017

S M T W T F S
      1
2345678
910 1112131415
16171819202122
23242526272829
3031     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags