Наконец дошли руки до парсера.
https://github.com/rampelstinskin/ParserGenerator
В данный момент это все еще дремучая альфа, но она уже работает.
В продакшене пока использовать не стоит, ибо будут ломающие изменения.
Реализовано:
Разбор выражений с учетом приоритетов операторов.
Эвристика разрешения конфликтов "кто длиннее тот и прав". Отход от правил PEG но это необходимое условие для того чтобы расширение во время разбора не было мучительно больным. Да и вообще приоритетный выбор considered harmful.
Внутренняя реализация заточена под динамическое расширение.
Еще не сделано:
Динамическое расширение.
Относительные приоритеты и силы связывания. Сейчас приоритеты не задаются вообще. А сила связывания задается циферками.
Разрешение конфликта в случае если два правила съели одно и тоже количество текста (приоритеты нужны именно для этого). Сейчас молча будет выбрано одно из них. Какое зависит от фазы луны.
Куча оптимизаций. Я их уже придумал, но делать буду потом.
Нужно: Придумать название алгоритму.
Ибо штука получилась очень мощная.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>