Size: a a a

Compiler Development

2020 November 25

PS

Peter Sovietov in Compiler Development
Yaroslav Schekin
Я почему-то помнил, что lexer hack и ему подобные — это семантический контекст (т.е. "зависимость от контекста" тут используется неформально, а формально — это unrestricted grammar)... неправильно думал, получается?

>  думаю, ужаснетесь, какой там "изящный" код  :)

Да во многих реальных парсерах, использующих bison и т.п., что-то подобное (разнообразные hacks, в т.ч. "дополнительные семантические действия на стадии разбора") есть, наверное — но не просто так, а чтобы остаться в LALR(1). ;)
Кажется, эта тема в чате уже поднималась. Посмотрите эту ссылку: https://eli.thegreenplace.net/2011/05/02/the-context-sensitivity-of-cs-grammar-revisited
источник

YS

Yaroslav Schekin in Compiler Development
Peter Sovietov
> Может, стоит добавить и каких-то недостатков recursive descent (я понимаю, что статья не об этом... или предупреждение о том, что минусы тут не рассматриваются)?

Недостатки появились в конце заметки. Спасибо!
Я перечитал, спасибо!
Хмм... обычно ещё пишут, что проблема recursive descent в том, что он разбирает неизвестно что (о том, к примеру, что грамматика вдруг стала неоднозначной после изменений (и выбирается "случайная" альтернатива), никто уже не узнает... до bugs в runtime / reports пользователей) и неизвестно как (я об асимптотике).
источник

KR

K R in Compiler Development
Peter Sovietov
Новый вариант — PEG, который, на самом деле, "синтаксический сахар" над тем же рекурсивным спуском :)
Ocaml - YACC
источник

TS

Timur Safin in Compiler Development
Peter Sovietov
Кажется, эта тема в чате уже поднималась. Посмотрите эту ссылку: https://eli.thegreenplace.net/2011/05/02/the-context-sensitivity-of-cs-grammar-revisited
да, и не могу не заметить (еще раз) что https://t.me/CompilerDev/24139
источник

PS

Peter Sovietov in Compiler Development
K R
Ocaml - YACC
Прямо-таки в классическом виде? А почему вот это так похоже на Menhir? :)
https://github.com/ocaml/ocaml/blob/trunk/parsing/parser.mly
источник

KR

K R in Compiler Development
Peter Sovietov
Прямо-таки в классическом виде? А почему вот это так похоже на Menhir? :)
https://github.com/ocaml/ocaml/blob/trunk/parsing/parser.mly
Ну был недавно YACC. Menhir они только что добавили!!!! И menhir - это же не рекурсивный спуск.

Не, реально YACC хороший тем, что не меняется.
источник

PS

Peter Sovietov in Compiler Development
Угу, и я даже отвечал на это сообщение :)
источник

YS

Yaroslav Schekin in Compiler Development
Peter Sovietov
Кажется, эта тема в чате уже поднималась. Посмотрите эту ссылку: https://eli.thegreenplace.net/2011/05/02/the-context-sensitivity-of-cs-grammar-revisited
В этой статье всё тоже как-то неформально. Как в CSG описать этот момент, мне неочевидно. Впрочем, особой практической ценности в этом нет.

Спасибо за ответ и ссылку!
источник

TS

Timur Safin in Compiler Development
Peter Sovietov
Угу, и я даже отвечал на это сообщение :)
(еще раз перечитал дискуссию тогдашнюю - кайф!)
источник

PS

Peter Sovietov in Compiler Development
Timur Safin
(еще раз перечитал дискуссию тогдашнюю - кайф!)
Вообще, надо расширять практику написания github-обзоров. Приходит очередной новичок, а сил уже не остается повторяться. То, что раньше вызывало жаркие дебаты, в десятый раз вызывает уже только усталость :)
источник

AG

Alex Gryzlov in Compiler Development
Peter Sovietov
Вообще, надо расширять практику написания github-обзоров. Приходит очередной новичок, а сил уже не остается повторяться. То, что раньше вызывало жаркие дебаты, в десятый раз вызывает уже только усталость :)
я давно уже говорю что у каждого серьезного чата должна быть своя вики с наработанной аргументацией и основными положениями местного дискурса
источник

AG

Alex Gryzlov in Compiler Development
интересно можно ли сделать условного убийцу телеграма с такой встроенной фичей
источник

M

MrSmith in Compiler Development
Alex Gryzlov
я давно уже говорю что у каждого серьезного чата должна быть своя вики с наработанной аргументацией и основными положениями местного дискурса
Ещё ветки, но тогда выйдет zulip + wiki
источник

IK

Ivan Kochurkin in Compiler Development
Alex Gryzlov
я давно уже говорю что у каждого серьезного чата должна быть своя вики с наработанной аргументацией и основными положениями местного дискурса
Только если использовать гитхаб, то не вики, т.к. в ней недоступны пулл-риквесты.
источник

AG

Alex Gryzlov in Compiler Development
это сейчас все попривыкали к гитхабу, а так есть же куча вики-хостингов
источник

IK

Ivan Kochurkin in Compiler Development
Yaroslav Schekin
Я перечитал, спасибо!
Хмм... обычно ещё пишут, что проблема recursive descent в том, что он разбирает неизвестно что (о том, к примеру, что грамматика вдруг стала неоднозначной после изменений (и выбирается "случайная" альтернатива), никто уже не узнает... до bugs в runtime / reports пользователей) и неизвестно как (я об асимптотике).
Случайная альтернатива - это похоже на издевательство, для эзотерических языков покатит 😊 Правильно генерировать ошибку, если есть неочевидность и переписывать код, чтобы ее избежать.
источник

PS

Peter Sovietov in Compiler Development
Ivan Kochurkin
Случайная альтернатива - это похоже на издевательство, для эзотерических языков покатит 😊 Правильно генерировать ошибку, если есть неочевидность и переписывать код, чтобы ее избежать.
Случайная альтернатива используется чрезвычайно широко. Правда, для других грамматических дел. Не для разбора, а для... ? :)
источник

IK

Ivan Kochurkin in Compiler Development
Yaroslav Schekin
Может, стоит добавить и каких-то недостатков recursive descent (я понимаю, что статья не об этом... или предупреждение о том, что минусы тут не рассматриваются)?

> возможен разбор для неограниченных или Тьюринг-полных грамматик.

Я в этом не разбираюсь, но разве это не одно и то же (точнее, мне кажется, что это "неограниченные грамматики" = "машины Тьюринга")?

> не выдерживает столкновения с реальностью в виде контекстно-зависимых грамматик сложных языков программирования

Просто вопрос — а у каких сложных языков именно формально контекстно-зависимые грамматики?
Даже у HTML - контекстно-зависимая, если количество тегов не ограничено. Поскольку id закрывающего тега должен быть равен id открывающему. Да и во многих современных языках не обойтись без вставок кода в КС грамматику, чтобы все правильно парсилось (интерполяция строк, heredoc в php, lexer hack как уже писали).
источник

IK

Ivan Kochurkin in Compiler Development
Vladimir Kazanov
Ну хорошо. В питоне и старый, и новый парсеры реализованы на собственном генераторе компиляторов.
А зачем собственный, почему существующие не устроили, используется этот генератор еще где-нибудь кроме Питона?
источник

IK

Ivan Kochurkin in Compiler Development
Alex Gryzlov
это сейчас все попривыкали к гитхабу, а так есть же куча вики-хостингов
Есть, но система контроля версий в вики слишком ограниченная - линейная история, пулл-риквестов нет (по крайней мере я не видел других).
источник