Size: a a a

Compiler Development

2021 May 26

РС

Роман Соловьев... in Compiler Development
т.е. условно перевод с паскаля на C++ это целый "компилятор"?
источник

к

кана in Compiler Development
ну компилятор сто проц, просто еще и транслятор, как более узкий термин
источник

h

hazer_hazer in Compiler Development
желательно да. можно остановится только на построении AST кода на паскале и потом пытаться его переводить в C++.
Но вы в какой-то момент всё равно столкнетесь с проблемой, что как вы описываете что-то на паскале не имеет точных аналогов в C++ и тогда вы придете к мысли, что вам нужно какое-то более абстрактное промежуточное представление, которое будет легче переводить в плюсы. И в итоге расрас и всё... у вас почти полноценный компилятор паскаля, только компилирует он в плюсы
источник

РС

Роман Соловьев... in Compiler Development
а что ещё есть?) и где почитать

на текущий момент знаю про:
- рекурсивный спуск и LL(1)
- про LR
-от вас вот узнаю про комбинатор парсеров (вроде бы тот же самый рекурсивный спуск, но с модификациями)
источник

AT

Alexander Tchitchigi... in Compiler Development
Фронтенд чтобы парсить Паскаль, бэкенд чтобы эмитить C++, мидлэнд с проверкой типов и оптимизациями по вкусу... Да, целый. 👍😁
источник

к

кана in Compiler Development
он я думаю про то, про что я выше написал, что распарсить исходный код это самое начало, потом же его еще нужно отранслировать, а потом и запритипринтить

выходит три этапа

Text -> Pascal AST
Pascal AST -> Cxx AST
Cxx AST -> Text

вот комбинаторы тебе помогут написать первый этап, третий этап тоже тривиальный, а во втором вся соль
источник

s

suhr in Compiler Development
Ещё есть Эрли и GLR. Ну и PEG, но это по-сути опять рекурсивный спуск.
источник

AT

Alexander Tchitchigi... in Compiler Development
А ещё есть разрешение имён, проверка типов, анализ потоков данных, оптимизации, распределение регистров, выбор инструкций. Почитать в учебнике по компиляторам.
источник

YS

Yaroslav Schekin in Compiler Development
Потому что более подходящего чата по этим темам просто нет, к сожалению (IMHO).
источник

h

hazer_hazer in Compiler Development
ну вот только боюсь ничего не выйдет на втором этапе...
источник

РС

Роман Соловьев... in Compiler Development
это вы про части и этапы компиляции, а я про подходы анализа
источник

h

hazer_hazer in Compiler Development
стат анализа или вы все же про парсинг?
источник

к

кана in Compiler Development
просто ты так пишешь, что если распарсить исходный код, то все дело сделано и транслятор готов

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

AT

Alexander Tchitchigi... in Compiler Development
Вы спросили какие остальные чати истории, про которую я написал. Я и ответил какие. 🤷‍♀️
источник

РС

Роман Соловьев... in Compiler Development
ааа, вы в этом смысле имели в виду)

что парсер это первый этап, понял
источник

AT

Alexander Tchitchigi... in Compiler Development
Напомню, раз пошла такая дискуссия... 😃
источник

AT

Alexander Tchitchigi... in Compiler Development
Переслано от Yuri Buyanov
источник

РС

Роман Соловьев... in Compiler Development
для простейших случаев цикл - цикл вроде бы вполне
источник

к

кана in Compiler Development
нет
источник

AT

Alexander Tchitchigi... in Compiler Development
А с массивами и их индексацией — уже интереснее. А там ещё записи есть с вариантами... И я-то Паскаля почти не знаю и не помню. 😉
источник