Size: a a a

Compiler Development

2020 June 21

PS

Peter Sovietov in Compiler Development
Aleksey Shipilev
Я такого не видел. В общем виде это к поиску изоморфизмов (например, графа IR), что стоит дорого. А выхлоп от оптимизации наверняка копеечный, ибо кажется, что пар абсолютно идентичных функций мало, особенно после выкидывания тривиальных аксессоров (которые всё равно инлайнятся в подавляющем большинстве случаев). Могу себе представить, что подобное склеивание ведёт к весёлой отладке, когда брейкпоинт в одной функции срабатывает в "другой", когда хотпатч одной функции ведёт к изменению "другой", и т.п. :)
Хуже того, в общем случае задача неразрешима, поскольку связана проблемой останова :)
источник

f

fldlg2 in Compiler Development
Андрей Казанцев
А почему контекстно зависимые языки не прижились? Просто везде пишут что то типо
В современной практике такие языки
большого значения не имеют
Как это не прижились, а C/C++? https://en.wikipedia.org/wiki/Lexer_hack
источник

АК

Андрей Казанцев... in Compiler Development
источник

f

fldlg2 in Compiler Development
КЗ-языки не опишешь LALR(1)-грамматикой без ухищрений типа пресловутого lexer hack, ну или обобщения КЗ-краматики до более generic КС-грамматики с последующим уточнением промежуточного дерева разбора с учётом контекста.
источник

f

fldlg2 in Compiler Development
Потому и пытаются избегать КЗ там, где возможно.
источник

IK

Ivan Kochurkin in Compiler Development
Heredoc в php такая, ну и описание строк в некоторых других языках.
источник

АК

Андрей Казанцев... in Compiler Development
fldlg2
КЗ-языки не опишешь LALR(1)-грамматикой без ухищрений типа пресловутого lexer hack, ну или обобщения КЗ-краматики до более generic КС-грамматики с последующим уточнением промежуточного дерева разбора с учётом контекста.
А почему надо описывать LALR(1) грамматикой?
источник

f

fldlg2 in Compiler Development
Андрей Казанцев
А почему надо описывать LALR(1) грамматикой?
Потому что industry standard :-) А если серьёзно, что ещё парсит с O(N) кроме LR(1)?
источник

DP

Dmitry Ponyatov in Compiler Development
fldlg2
КЗ-языки не опишешь LALR(1)-грамматикой без ухищрений типа пресловутого lexer hack, ну или обобщения КЗ-краматики до более generic КС-грамматики с последующим уточнением промежуточного дерева разбора с учётом контекста.
flex можно снаружи переключать (из bison-части) в разные state ?
источник

f

fldlg2 in Compiler Development
Dmitry Ponyatov
flex можно снаружи переключать (из bison-части) в разные state ?
Обычно можно, это как раз "lexer hack". Но это не поможет, если парсеру в этот момент нужно сделать look-ahead, а с контекстом он ещё не определился.
источник

f

fldlg2 in Compiler Development
Дошло: переключать те state, которые %x, снаружи - нетривиально, штатного способа нет, так что пришлось бы и тут выкручиваться.
источник

f

fldlg2 in Compiler Development
Например, рестартовать лексер, подсовывать ему на вход хитрый префикс перед остатком input-а и т.д.
источник

PS

Peter Sovietov in Compiler Development
А можно — в который раз вспомнить про scannerless-разбор :)
источник

f

fldlg2 in Compiler Development
Peter Sovietov
А можно — в который раз вспомнить про scannerless-разбор :)
Scannerless — это хорошо, но сейчас трудноосуществимо IMHO. Или затратно.
источник

PS

Peter Sovietov in Compiler Development
fldlg2
Scannerless — это хорошо, но сейчас трудноосуществимо IMHO. Или затратно.
В теории — не так уж затратно. Как раз те самые O(N), о которых Вы спрашивали, для Packrat-версии. На практике, увы, все не так радужно.
источник

f

fldlg2 in Compiler Development
Peter Sovietov
В теории — не так уж затратно. Как раз те самые O(N), о которых Вы спрашивали, для Packrat-версии. На практике, увы, все не так радужно.
А разве Packrat не O(N^3) в лучшем случае? Или Вы о его применении к проверенному LL(1)?
источник

f

fldlg2 in Compiler Development
(Я не знаю на самом деле, PEG для меня — область новая)
источник

PS

Peter Sovietov in Compiler Development
fldlg2
А разве Packrat не O(N^3) в лучшем случае? Или Вы о его применении к проверенному LL(1)?
Там линейное время для PEG-грамматик, которые могут больше, чем LL(1). Но при этом память расходуется очень активно.
источник

f

fldlg2 in Compiler Development
Peter Sovietov
Там линейное время для PEG-грамматик, которые могут больше, чем LL(1). Но при этом память расходуется очень активно.
Мемоизация?
источник

PS

Peter Sovietov in Compiler Development
fldlg2
Мемоизация?
Естественно.
источник