Здравствуйте, vdimas, Вы писали:
V>>>Прост сам алгоритм разбора, но задача генерирования парсера из абстрактного описания не проста — такая же как и для других алгоритмов.
WH>>Это тривиальная задача. Делается, вообще не приходя в сознание.
V>Ну вот вы делали генератор для ПЕГ более 2-х лет.
V>Я не считаю, что 2 года — это трививально.
Нет. Генерацию первой версии парсера из грамматики я сделал за пару часов.
Остальное время ушло на создание алгоритма восстановления.
V>Т.е. остальные 6 лет ты потратил на обыгрывание восстановления после ошибок?
V>По-моему, ты сам себя закопал только что.
Ну так ты покажи алгоритм лучше.
Ну хоть один.
WH>>Покажи хоть чей. Там же по твоим утверждениям всё просто.
V>Хоть чей ты можешь взглянуть и без меня.
Так я уже посмотрел. И ничего внятного не нашёл.
По тому тебя треплом и называю.
WH>>Значит кто-то должен был это сделать.
V>Ну вот Бизон делает GLR, смотрел?.
https://www.gnu.org/software/bison/manual/html_node/Error-Recovery.html
Это же просто звиздец.
You can define how to recover from a syntax error by writing rules to recognize the special token error. This is a terminal symbol that is always defined (you need not declare it) and reserved for error handling. The Bison parser generates an error token whenever a syntax error happens; if you have provided a rule to recognize this token in the current context, the parse can continue.
Это пользователь должен описывать правила восстановления руками. Ахринеть.
1)Это куча мутной работы.
2)Не работает если в грамматике появляются новые правила, которые пользователь не предусмотрел.
Note that discarded symbols are possible sources of memory leaks, see Freeing Discarded Symbols, for a means to reclaim this memory.
Если бы нитра текла меня бы тут на смех всем RSDN'ом подняли.
Ты больше не ссылайся на такое. Это же полнейший неадекват.
И это по твоим утверждениям лучший ГЛР парсер.
WH>>Сколько десятков часов ты уже потратил отвечая на мои сообщения?
V>По 3-5 мин на сообщение.
Такие простони? Не верю.
WH>>В нисходящих парсерах это всё тоже доступно без проблем. Только этого мягко говоря недостаточно.
V>Недостаточен всего один следующий символ, ты хотел сказать.
V>Желательно закончить некое выражение, верно?
V>А для этого нужен текущий стек разбора, верно?
V>Причем, в рекурсивном спуске у нас стек разбора неявный, т.е. недоступный для его обхода/реинтерпретации, верно?
Неверно. Стек получить не трудно.
Но одного стека мало. Даже DAG'а стеков недостаточно.
V>Поэтому нужен какой-нить другой алгоритм, типа Эрли, который даст стек (стэки) разбора в виде, доступном для обхода.
Нет. Он нужен для того чтобы можно было проверять и оценивать множество вариантов восстановления.
V>Отчего же стандартом де-факто остаётся старенький Бизон?
Покажи как мне ИДЕ на бизоне.
На нитре (хотя она ещё недоделана) уже есть.
V>Тем не менее, это тоже был пример контекстно-зависимой грамматики.
Это был пример чуши.
Все языки, в которых есть требование объявления переменной до использования КЗ по определению.
Мы же говорим про парсеры которые из-за свой вынужденной убогости разбирают строгое надмножество языка.
После чего другой код отсекает те программы, которые языку не принадлежат.
Вот тут именно этот код и сработал.
V>У тебя на "using syntax XXX" происходит "кое-что".
Не кое-что, а загрузка грамматики из внешней ДЛЛ про которую автор языка даже не подозревает и добавление её в текущую грамматику.
V>Кароч, не заставляй коллег делать лишний раз "охотничью стойку", упоминая про КЗ. )))
V>Давай мы будем говорить про КЗ тогда, когда будет его полноценная формальная поддержка.
Делать поддержку КЗ в виде BNF дурь полнейшая.
Просто по тому что написать грамматику языка в виде КЗ не сложно, а охринеть как сложно. Я точно такой инструмент использовать не стану.
V>Надеюсь, в твоём случае, в отличие от Влада, моей фразы "декомпозиция грамматик" будет достаточно для демонстрации понимания того, что при этом происходит?
Нет. Не будет.
Ибо понимания я не вижу.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>