Здравствуйте, WolfHound, Вы писали:
V>>Про описание процедуры восстановления для восходящего парсинга ты мог почитать в интернете:
WH>Да чушь всё это. Низкокачественный наивняк.
Мде...
По-прежнему, единственным мотивом для меня потратить значительное кол-во часов для демонстрации — это попытаться тебя заинтересовать.
И ладно бы у тебя было ну хотя бы нейтральное ко всему этому отношение или интерес к изучению предмета.
Пока что ты тщательно демонстрируешь противоположное.
V>>Я говорил и говорю, что суть LR-парсинга проста.
V>>В этом месте любому адекватному разработчику давно должно стать стыдно, если ему для объяснения простого алгоритма нужен некий исходник.
WH>Простые алгоритмы не работают.
1. А как же лексер работает?
2. Простые алгоритмы допиливаются.
WH>Я прошу не всю нитру, а только парсер.
WH>ГЛР парсеры же легко делаются.
Прост сам алгоритм разбора, но задача генерирования парсера из абстрактного описания не проста — такая же как и для других алгоритмов.
V>>В общем, опять демагогия на демагогии.
WH>Во-во. Вместо того чтобы показать ГЛР парсер который круто работает ты переводишь стрелки.
Я ни разу не обещал показать исходник, я лишь делился полученными результатами.
Чтобы я что-то тебе показал, меня надо мотивировать потратить на это значительное кол-во часов.
И с последним у тебя явные проблемы.
V>>Т.е., даже тебе, занятому именно в этой области 100% рабочего времени, требуется некоторое время, дополнительное к уже потраченному?
V>>Всё веселее и веселее, однако...
WH>Так это по тому что я делаю качественное восстановление.
WH>А какое попало восстановление действительно просто.
WH>Только толку от него нет от слова совсем.
Мде...
Если я тебе говорю, что таблица для восходящего разбора СОДЕРЖИТ необходимые данные для восстановления (и это действительно так, инфа проверяемая), а ты в ответ "а покажите-ка мне восстановление лучше, чем у меня, где я потратил на это годы" — то тебе сразу красная карточка за неумение вести обсуждение.
Тут не о чем спорить.
Например, в таблице перехода лексера по данному входному символу может не быть переходов из данного состояния. Зато по этой таблице можно посмотреть, по каким символам переходы от данного состояния, таки, есть и подсказать их.
Таблицы для LR-разбора по семантике фактически равны таблице лексера, в отличие от таблиц, скажем, для LL(1) разбора на ДКА.
Понимание этих вещей требует куда как меньших умственных затрат, чем на твой пресловутый альфа-блендинг.
А так-то да. "Качественное восстановление" — это всегда набор эвристик по имеющимся данным.
V>>Потому что не то, что критиковать, а даже просто обсуждать ЛЮБОЕ твоё решение никто не имеет права.
WH>Обсуждение должно быть конструктивным. Тогда и я конструктивен.
Конструктив — это обмен технической информацией.
У тебя же сплошной стиль "а у вас зато молоко убежало". ))
WH>А когда есть только трёп, противоречащий всем научным работам, которые я видел
Ну так покажи мне исходники программ, упоминаемых в тех научных работах?
Потому что я тут тоже видел "научную" реализацию Эрли... Но как программист скажу — низачот.
Или брал я как-то один "научный" исходник по ИИ, так там и вовсе с пол-тыка в ~8 раз скорость поднял.
WH>да ещё и таким тоном как будто ты всё знаешь то имеем то что имеем.
Ты мне своего не приписывай.
Таким тоном, наоборот, разговаривают когда НЕ желают узнавать что-то новое.
У меня чаще простое любопытство и дележ своим опытом.
WH>>>И это при том что я пока даже не требую, чтобы парсер поддерживал изменение грамматики во время разбора (это КЗ).
V>>Вот тот пример, что ты показывал с json: [...] — это не есть изменение грамматики во время разбора.
WH>Вот без этой строчки этого синтаксиса не будет.
WH>WH>using syntax CSharpJson.Extention;//вот тут мы добавили синтаксис json
WH>
WH>Так что это если не изменение грамматики во время разбора?
А в C# вот тут:
unsafe {
fixed(char * a = str) {...}
}
?
А какая грамматика получается после объединения контекстно-свободных грамматик?
V>>Некоторые генераторы парсеров умеют делать декомпозицию автоматом — разбивают все правила на группы с минимальной связанностью по нетерминалам, т.е. на "подграмматики". Таким образом общий объем таблиц переходов получается меньше. Получить 5-7 таблиц можно аж бегом на большой грамматике.
WH>Это мелкие детали реализации парсеров работающих на других принципах.
WH>В нитре не нужно, ибо таблиц нет.
Ну и как ты собрался сравнивать реализацию на goto/call и табличную?
Сравнивать надо на одинаковой технике реализации, чтобы сравнение было адекватным.
Так-то любую табличную реализацию можно перевести на goto/call и обратно, дело в трудоёмкости.
Но скорость до 2-х раз может отличаться сходу даже по идентичному алгоритму разбора, только лишь за счёт техники реализации.
V>>Ровно наоборот — производительность от этого обычно повышается.
WH>Опять голоса. Я говорю про добавление контекстно-зависимых возможностей в парсер.
Ты говоришь про semantic actions, которые влияют на сам парсер.
ОК.
Поинт понятен и отметается сходу тоже, бо такое можно практически при любой технике парсинга, т.е. делаем вид, что этого "аргумента" не было, не засоряем себе голову.