Size: a a a

Compiler Development

2020 March 26

DP

Dmitry Ponyatov in Compiler Development
Yaroslav Schekin
Какие это "регулярки"?!
Вот это как раз — "ужасные костыли", т.е. свой DSL, в основе которого лежат regex-ы.
А "мощности" у него хватает на разбор некоторых контекстно-зависимых элементов, и хоть какая-то выразительность есть...
Но как он работает (в плане принципов) / почему он такой (откуда автор(ы) всё это взяли) — непонятно. :(
умело бы оно пользовательские dllки запускать с кастомными парсерами — цены бы не было
источник

DP

Dmitry Ponyatov in Compiler Development
источник

YS

Yaroslav Schekin in Compiler Development
Dmitry Ponyatov
умело бы оно пользовательские dllки запускать с кастомными парсерами — цены бы не было
"Оно" и так умеет... только вот что-то их не пишет почти никто. ;(
А вообще, именно в эту "сторону" там идут путём развития интерфейсов обмена с кастомными парсерами, если что.
источник

VI

Vitaly Ivanin in Compiler Development
Товарищи, подскажите профану.

Пишем тут коллективно простенький компилятор в рамках курса в инсте. Мой коллега написал преобразование из AST -> лианеризованный ir, который по сути содержит список методов со списком стейтментов с аргументами вида src=42 trg=53.

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

Но как это сделать если представление уже лианеризовано? Или считать, что дерево не явное - с ребрами (src, trg).

Аллокацию регистров предлагают делать уже после этой операции.
источник

PS

Peter Sovietov in Compiler Development
Vitaly Ivanin
Товарищи, подскажите профану.

Пишем тут коллективно простенький компилятор в рамках курса в инсте. Мой коллега написал преобразование из AST -> лианеризованный ir, который по сути содержит список методов со списком стейтментов с аргументами вида src=42 trg=53.

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

Но как это сделать если представление уже лианеризовано? Или считать, что дерево не явное - с ребрами (src, trg).

Аллокацию регистров предлагают делать уже после этой операции.
Если у Вас 42 и 53 это номера узлов в списке IR, то речь уже идет о дереве (или в общем случае о графе). Что подразумевается под динамическим покрытием? Простым и достаточно эффективным вариантом в данном случае является maximal-munch сопоставление с шаблонами-поддеревьями, начиная от корня дерева. Но есть несколько более сложные методы, основанные на динамическом программировании.
источник

VI

Vitaly Ivanin in Compiler Development
Peter Sovietov
Если у Вас 42 и 53 это номера узлов в списке IR, то речь уже идет о дереве (или в общем случае о графе). Что подразумевается под динамическим покрытием? Простым и достаточно эффективным вариантом в данном случае является maximal-munch сопоставление с шаблонами-поддеревьями, начиная от корня дерева. Но есть несколько более сложные методы, основанные на динамическом программировании.
да, всё так.
ну под "динамическим" я имел в виду что я буду решать это динамикой снизу вверху, где при выборе шаблона в узле мы перебираем все шаблоны и ищем минимум суммы cost(T) + cost(mem[leftNode]) + cost(mem[rightNode])

Меня просто смущает тот момент, что у нас по сути может получится ориентированный граф. А в каком порядке надо его обходить? просто от констант bfs'ом?
источник

VI

Vitaly Ivanin in Compiler Development
Не получится ли там каких то конфликтов из-за того что это граф а не дерево, вот в чем суть вопроса
источник

VI

Vitaly Ivanin in Compiler Development
кажется что нет, но хз
источник

PS

Peter Sovietov in Compiler Development
Vitaly Ivanin
да, всё так.
ну под "динамическим" я имел в виду что я буду решать это динамикой снизу вверху, где при выборе шаблона в узле мы перебираем все шаблоны и ищем минимум суммы cost(T) + cost(mem[leftNode]) + cost(mem[rightNode])

Меня просто смущает тот момент, что у нас по сути может получится ориентированный граф. А в каком порядке надо его обходить? просто от констант bfs'ом?
У Вас задание такое — использовать динамическое программирование? Если нет, то я бы на время забыл об этом подходе. Используйте простейший жадный алгоритм с обходом сверху вниз и выбором наибольшего сопоставления.

Очевидно, что если циклических конструкций нет, то максимум, что грозит это DAG. А если Вы в своем компиляторе не производили CSE, то и беспокоиться не о чем — это обычное дерево или, точнее говоря, лес.
источник

VI

Vitaly Ivanin in Compiler Development
Peter Sovietov
У Вас задание такое — использовать динамическое программирование? Если нет, то я бы на время забыл об этом подходе. Используйте простейший жадный алгоритм с обходом сверху вниз и выбором наибольшего сопоставления.

Очевидно, что если циклических конструкций нет, то максимум, что грозит это DAG. А если Вы в своем компиляторе не производили CSE, то и беспокоиться не о чем — это обычное дерево или, точнее говоря, лес.
ну мне норм с динамикой, у нас под неё все готово, так что не вижу в ней проблем.

да, тоже так подумал, спасибо
источник

YS

Yaroslav Schekin in Compiler Development
e
Советую посмотреть на E-Control, и если не хватит документации и примеров, то свяжись с автором, если он еще жив.
Я пролистал примеры / документацию, спасибо ещё раз!
Но внутри, похоже, очередная версия "ужаса на основе регулярок". ;(
источник

e

e in Compiler Development
Yaroslav Schekin
Я пролистал примеры / документацию, спасибо ещё раз!
Но внутри, похоже, очередная версия "ужаса на основе регулярок". ;(
Если интересует сам подход, то не думаю что регулярные выражения это проблема.
источник

YS

Yaroslav Schekin in Compiler Development
e
Если интересует сам подход, то не думаю что регулярные выражения это проблема.
Да, сами регулярные выражения во всех этих (довольно похожих, кстати) подходах — не проблема.
Потому что они — очень малая часть этих подходов.
А "чистые" регулярки сами по себе для этого практически бесполезны.
источник

PS

Peter Sovietov in Compiler Development
Любопытные подробности работы WASM-компилятора в Firefox. Этот однопроходный компилятор нацелен на быстрое порождение кода.
http://wingolog.org/archives/2020/03/25/firefoxs-low-latency-webassembly-compiler
источник

AK

Andrei Kurosh in Compiler Development
Peter Sovietov
Любопытные подробности работы WASM-компилятора в Firefox. Этот однопроходный компилятор нацелен на быстрое порождение кода.
http://wingolog.org/archives/2020/03/25/firefoxs-low-latency-webassembly-compiler
Очень приятная и легкая для чтения статья. Интересно, как перевести «no noodling» в данном контексте?
источник

PS

Peter Sovietov in Compiler Development
Andrei Kurosh
Очень приятная и легкая для чтения статья. Интересно, как перевести «no noodling» в данном контексте?
Например: без лишних телодвижений, без дополнительных усилий. Или — "не заморачивайся" :)
источник

AK

Andrei Kurosh in Compiler Development
«Не заморачиваться»
источник
2020 March 27

F

Foxner in Compiler Development
Hi. Can I ask questions in English here?
источник

KR

K R in Compiler Development
Yes, you can.
источник

AK

Andrei Kurosh in Compiler Development
This is actually a russian-speaking channel. So while a particular question or two are alright, starting a whole discussion in english is discouraged
источник