metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2011-06-06 01:13 am

Парсерный оверкилл?

Внезапно понадобилось сделать парсер строк с грамматикой подобного вида:
ИмяКласса | ИмяКласса(Параметр0,...)

Можно было бы не вдумываясь, склепать что-нибудь типа "найти скобки, до скобок - имя класса, внутри скобок разделить по запятым".
Но мне домашний паук из розетки приказал это сделать на генераторах парсеров, в частности fslex/fsyacc, что заняло немного больше времени, но как минимум, я теперь смогу при необходимости нормально менять грамматику или писать новые парсеры, разобравшись на простом примере.

Проблема в следующем: не является ли использование вуду-знаний из драгонбука правильных методик оверкиллом? А то уже не первый раз на работе возникают споры на тему "почему нужно делать правильно и долго, если можно сделать быстро и, с некоторыми ограничениями, будет работать".

[identity profile] permea-kra.livejournal.com 2011-06-15 08:42 am (UTC)(link)
Ваще-то да, поскольку там потроха изрядно другие, чем у простых парсер-комбинаторов.

[identity profile] gabaidulin.livejournal.com 2011-06-15 09:25 am (UTC)(link)
Хмм. Ну вообще с точки зрения кода эту будет тот же парсер комбинатор(то есть мы строим грамматику состоящую из простых правил с использованием простых парсеров, комбинируя их в более сложные с помощью специальных операторов), надо будет добавить with PackratParser и использовать lazy vals. Ну-да ладно.