Re[29]: Опциональные типы
От: vdimas Россия  
Дата: 14.03.17 10:31
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>>>Да уже много раз показывал.

V>>Т.е. не можешь.
WH>Одних ЗТ в С++ более чем достаточно.

Ты эпично слился с ЗТ в С++. Если оттрекать весь спор с самого начала — ни одно моё утверждение не было ошибочным.
Ты мне приписывал всякую херню и "разбивал" её.
И тем более забавно, что ты сам дважды крупно крупно ошибся.
Чего и следовало ожидать, собсно.


V>>NetBeans IDE изначально точно такой же учебный студенческий проект, как и ANTLR.

WH>Тем не менее ANTLR для IDE использовать пытаются.

Пусть.
На каждую существующую платформу имеется 2-3 популярных ИДЕ, что оправдывает уникальность каждой такой разработки.
Ваша Нитра идёт на одну всего платформу, т.е. её потенциальный рынок тоже 2-3 построенных на ней ИДЕ.


V>>ASN.1 смотрел?

V>>А какие профили кодирования смотрел?
WH>Ты собрался ASN.1 парсить при помощи ANTLR?

Любой тулкит ASN.1 — это генератор парсеров.
Продвинутые такие тулкиты тоже имеют режим визуализации как грамматики, так и распаршенных данных.


WH>И после этого ты тут про адекватность говоришь?


Я про неадекватность:

Если для разборы бинарного формата нужен генератор парсеров, то это означает что формат придумывал конченый неадекват.

С тобой явно что-то не то происходит.


WH>>>Графическое представление грамматики тупо не нужно.

V>>Наоборот. Единственная польза от подобных тулзов — это графическое представление грамматики и соответствующего AST.
WH>Так в чём польза то?

Дурацкий вопрос.
Ты пробовал читать схемы электрические принципиальные через net-list?
А карту местности через список координат населённых пунктов?
Ну вот попробуй.


WH>Вот смотрим на твой первый скриншот.

WH>Там есть визуализация iteration_statement.
WH>И ровно то же самое написано в коде.
WH>Ну и смысл?

Смысл появляется начиная от грамматики банального калькулятора, где через грамматику описывается приоритет операций.
И не надо мне опять про набивший оскомину ПЕГ, где приоритет задаётся явно через "правильную" очередность описания правил.
Мне надо без всякой "правильной" очередности.
Мне надо честный choice.


WH>>>Там по сравнению с текстом нет никакой новой информации.

V>>Так у тебя дамп AST в виде текста? Или никакого дампа?
WH>У меня есть дерево с двусторонней навигацией между АСТ и текстом из которого этот АСТ получен.

Дерево — это и есть графическое представление графа (масло масляное, но ничего не поделать).
А чего тогда спрашиваешь "зачем"?


V>>Ну и по самой грамматике — ес-но новой информации нет.

V>>Есть другое представление имеющейся.
WH>Зачем?
WH>Что тебе даст стрелка, идущая мимо expression по сравнению со знаком "?" стоящим после expression?

Покажет, правильно ли я поставил закрывающие скобки.


WH>Парсер нитры очень предсказуем в отличии от всяких ANTLR'ов у которых производительность от каждого чиха скачет.


Да, производительность top-down парсеров сильно зависит от вида грамматики.
Даже если речь об эквивалентных грамматиках.
Разве это новость? Это азы.

Именно поэтому "американская школа" больше изучает восходящий парсинг.
Такой парсинг для понимания чуть сложнее, зато бонусом идёт то, что вид грамматики по боку.

У меня на 3-м курсе был курсовик — построение лексического анализатора из текстового описания в форме расширенного языка описания регулярных грамматик.
Сам язык описания можно распарсить КС-парсером. Я писал тот самый ручной рекурсивный спуск с предпросмотром на 1-2 лексемы.
Т.е. да, рекурсивный спуск можно написать при минимуме теоретической подготовки для несложной КС-грамматики.

Потом еще не раз делал аналогично для несложных задач. И точно так же сталкивался с задачами, где такой подход не работает или работает плохо.
Поэтому, не надо мне приписывать отрицание существования целого пласта алгоритмов нисходящего разбора. ))
Я всегда говорю о выборе наиболее подходящего решения под конкретную задачу. И меня раздражает усиленный игнор оппонентами именно такой постановки вопроса.

Потому что само отрицание стадии анализа проблемы, т.е. стадии выбора решения — это и есть тот самый инженерный идиотизм.
Остальное — лирика.
И особенно нелепая лирика — это твои "доказательства" из разряда "смотри, тут никто с тобой не согласен".

Я прекрасно помню, что примерно до 2008-го года "вы" были тут в резком меньшинстве. Это с вами, как раз-таки, был мало кто согласен. И ничего с тех пор НЕ изменилось — вас НЕ стало больше. Это случилось обратное — в период где-то 2007-2010-х гг стала происходить тотальная зачистка форума от "несогласных". Суть "зачистки" — через безнаказанное хамство некоторых активных участников форума, подкреплённое их статусом модеров.

Поэтому, я не прав тут только в одном — что могу продолжать общение даже в случае потока неадеквата в свой адрес.
Но это моё личное дело как бэ, верно? И уж точно не может что-то там доказывать или нет сугубо по технической части.


V>>Не переиграешь потом ничего в ядре, инерционность будет большая.

WH>Ядро уже не один раз переделывалось без изменения синтаксиса. И всё продолжало работать.

"Без изменения синтаксиса" означает один и тот же класс описываемых грамматик.
Поэтому, переделывались тонкости реализации одного и того же, вестимо.


V>>>>Там вообще своё восстановление написать можно, бо кишки Бизона открыты.

WH>>>Ты вообще понимаешь какой неадекват ты тут несёшь?
V>>Да ну? Это я, значит, по обрывкам информации ориентируюсь и считаю, что владею ею? ))
WH>1)Именно ты.
WH>2)Как эти две твои фразы соотносятся между собой не ясно.

Потому что ты выдаешь "окончательные суждения" именно на основе неполной информации.
Специалист обязан во всём сомневаться и сам всё проверять.
Считай, что это религия такая. Обязательная к принятию догма.


WH>>>Я вернул то что ты потёр. А теперь попробуй объяснить, как одно связано с другим?

V>>Ты мне можешь один раз прямо ответить на прямой вопрос — ты в ВУЗ-е учился на программиста или нет?
WH>Успокойся. Про регулярные выражения я знаю намного больше чем ты.

Ясно. Не учился или не доучился.
Ну так в другой раз переспроси, если некая терминология не понятна, а не накидывайся сходу.


V>>В результирующем ДКА пометка конечного состояния (выхода) должна стоять только у целевых лексем, ес-но.

V>>Т.е. в исходном описании грамматики необходимо как-то особо помечать целевые правила.
WH>1)В нитре всё прекрасно работает без всяких пометок

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

Например, в одном из проектов я использовал разные ключевые слова:
rule — как алиас правилу;
lexem — как описание целевой лексемы.

Пример будет примерно такой:
rule decdigits = ('0' |.. '9')+;
lexem decnum = decdigits;
lexem floatnum = decnum '.' {decnum} | '.' decnum;

У парсера тут будет только три выходных состояния: ошибка, decnum и floatnum.
Т.е. никакого decdigits.


WH>Вот такое вот вычитание одного бесконечного множества из другого.


Ну и чего тогда ты пишешь вот такое:

V>Это примерно такая же работа, как в языке расширенных регулярных выражений отличать конечные правила от промежуточных.
Что за бред опять?


В бизоне описываются только парсер, лексер для него описывается отдельно через flex.
Т.е. ты этого не знал, но опять бежишь на меня наезжать.
Теперь-то хоть прояснилось?


WH>И это просто частный случай более общей операции.

WH>
...
WH>


Я прекрасно знаю, как строить ДКА для операции вычитания.
Собсно, это банальная операция над множеством, где такую операцию преподают на 1-м курсе по предмету вышка.
Точно так же как знаю, что не всегда можно при этом получить ДКА (в сочетании с другими конфликтующими правилами, например).


WH>2)Как это связано с ручным описанием восстановления не ясно.


Считай, что ты таким образом помечаешь правила, до которых имеет смысл восстановиться.
Потому что тут чисто человеческий фактор — не до любых правил имеет смысл восстанавливаться.


V>>В общем, для адекватного обсуждения требовалось желание собеседников "втыкать" в тему.

WH>Мы предварительно посмотрели тесты производительности. И там всё было очень печально.

Не пойму логики.
Ты же взял Эрли, а там всё было еще печальнее в тестах?
Значит, надо было смотреть не только тесты?
Может, там руки кривые, т.е. реализация не ахти?
Такое часто происходит в академических проктах.
Потому что они считают стоимость разбора в кол-ве примитивных операций на символ.
И правильно делают, кста.
Потому что при прочих равных надо выбирать тот алгоритм, который имеет меньше примитивных операций на символ.
"При прочих равных" — это при возможности одинаково допилить эффективность этих примитивных операций.

Более того. В тех академических исходниках, которые я видел по GLR — там стояли даже счетчики статистики.
Да одно лишь обслуживание этих счетчиков вдоль иерархии, которая должна быть иммутабельна в течении довольно длинной цепочки символов — это всё обходится дороже, чем сам парсинг.

Собсно, именно поэтому я и отказываю тебе в здравом смысле.


WH>Да все тесты ГЛР имеют похожие цифры.


Тесты по Эрли имели еще более худшие цифры, и?
Алгоритм Эрли вообще не распарсит 80 мег никогда и низачто.
Не хватит памяти даже у самой навороченной машины.


V>>Пакрат запоминает удачные ветки разбора, Эрли все. Это принципиально. Держим это в уме и пытаемся ставить задачу.

WH>Классический пакрат для каждой позиции в тексте запоминает результат разбора всех правил грамматики для этой позиции.

Учись пользоваться общепринятой терминологией.
Описанное верно для "предпросмотра" строго на 1, т.е. имея на руках текущую лексему.


WH>Естественно такую дурь на практике никто не реализует.


Потому что "на практике" уже на следующем шаге большинство мемоизаций из предыдущего шага может отмереть.
Т.е. для той ж семантики можно делать предпросмотр больше, чем на 1.
Или, совмещая полезное с приятным, — мемоизировать только те цепочки правил, которые не короче некоторого заданного минимума.


WH>Он так был сформулирован только для доказательства линейности.

WH>Но это просто очередная демонстрация понимания тобой предмета.

Пфф...
Я понимаю особенности Пакрата куда как лучше, чем ты особенности GLR.

Причем, вот даже сейчас я через всего две фразы показал ЛЮБОМУ читателю со стороны суть происходящего.
А вы и за 8 не смогли кратко пояснить особенности вашего технического решения.
Потому что надо пользоваться общепринятыми понятиями, а не "а вот тут оно у нас по автомату бежит". ))

Причем, я в ваш исходник не смотрел — мне это НЕ интересно ни разу.
Если ты понял алгоритм — ты всегда сможешь нарисовать его самостоятельно.

Просто мне/нам приходится прикладывать определённые усилия, чтоб "понимать" хоть что-то из твоих разрозненных мутных намеков в разные годы.
Даже огромный вводный пост Влада по PEG — там ровным счётом ноль инфы:
http://www.rsdn.org/forum/philosophy/3862121
Загадочные вы наши.

Обрати внимание, что я более чем доступно описываю суть своих технических решений.
Потому что иначе вообще не имеет смысла раскрывать рот.
Если ты НЕ МОЖЕШЬ донести до коллег информацию, то лучше вообще молчать, чем потом строить из себя обиженного на весь белый свет, что, мол, "гений был не понят", ы-ы-ы. )))


V>>А у тебя что? У тебя ровно наоборот — взят неадекватный алгоритм для невалидного исходника и шустрый для валидного.

WH>А у меня с этим нет никаких проблем. Всё прекрасно работает.
WH>Ибо 99% исходника корректно и будет разобрано основным алгоритмом.
WH>И я тебе уже об этом говорил. Но ты же не меня слушаешь, а голоса в голове.

Ну вот слона-то ты и не заметил. ))
Я работаю с таким языком, где одна ошибка в начале h-файла делает весь остальной файл невалидным. Ну и еще десятки зависимых впридачу.
Вроде бы я не скрываю, какой у меня основной язык по работе.


V>>Но этого мало — по твоим словам выходит так, что в случае ошибки парсинг запускается повторно. И это основной сценарий в процессе той самой активной набивки текста???

WH>Так всё же запомнено.

Так и для GLR "все запомнено".


WH>Так что ничего из того что уже отпарсено не перепарсивается.

WH>Нужно только несколько раз в таблицу мемоизации заглянуть.
WH>Ты понимаешь, что с таким захлёбом о наносекундах говоришь? При том что время реакции человека 100 миллисекунд.

Так тебя не поймешь. То тебе одной миллисекунды на десятки килобайт мало (средний размер файла исходника), то теперь "взахлёб говоришь".
Смишно.
За 100 миллисекунд у меня парсится несколько метров.


WH>Память эрли кушает там, где есть куча неоднозначностей.

WH>Но GLR будет делать то же самое.

ЧТД, не понимаешь.
GLR оперативно отсекает неоднозначности.
Он практически никогда не растёт в ширину даже на сколь угодно длинных цепочках.
Собсно — это даже где-то вызов, придумать такую грамматику, где GLR будет вести себя так же как Эрли.
Хотя, теоретически они работают, считай, одинаково — вид сбоку.
Там всё отличие именно в возможности эффективного переиспользования памяти на практических задачах.


WH>А там, где неоднозначностей нет там всё линейно.


И опять у тебя ошибка.
Потому что "неоднозначностей" с т.з. LL(1), если Эрли распараллеливает LL(1) (например, распараллеливает прямую интерпретацию БНФ)
Увы, класс грамматик LL(1) слишком узок, поэтому для более сложных грамматик будут неоднозначности даже там, где их нет, скажем, для LL(2).


WH>Особенно это касается моего варианта Эрли у которого в правой части правил не последовательность, а произвольный автомат. Ибо вместо бестолковой рекурсии он просто бежит по автомату.


По LL(k) можно построить автомат, и?
Правильно ли я тебя понимаю, что ты построил Эрли не на основе распараллеливания LL(1) как в исходном алгоритме, а на основе LL(k)?
А чему равно k?


V>>Даже в том обсуждении про БНФ ты не понял очевидной вещи — это возможности автоматической трансформации грамматик.

WH>Не нужно. Просто не нужно если алгоритм и так работает.

При разработке сложного языка — нужно обязательно.


V>>А людям для обработки нужно AST, которое удобное для банального понимания.

V>>Но часто приходится подвергать грамматику факторизации/коррекции и получается уход от первоначальной идеи.
V>>С AST по изменённой грамматике бывает работать неудобно.
WH>А в случае с нитрой не приходится.
WH>Прикинь.
WH>Ты описываешь грамматику так как удобно, и она просто работает.

Если ты про описание ПЕГ — то это НЕ удобно для огромного класса грамматик.
Еще раз, медленно — мне удобней для обработки такое AST, которое построено на честном choice.
Т.е. НЕ зависит от последовательности упоминания правил.
Потому что такое AST будет самым простым, т.е. наиболее выразительным.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.