Size: a a a

Compiler Development

2021 May 26

к

кана in Compiler Development
для синтаксического анализа достаточно аст
источник

к

кана in Compiler Development
аст можно легко построить и вручную
источник

РС

Роман Соловьев... in Compiler Development
так это же синтаксический строит аст, разве нет?оО
источник

h

hazer_hazer in Compiler Development
вот я думал сам об этом. но каждый раз прихожу к тому, что "ну не буду же я AST руками писать, сейчас напишу простой парсер и дальше пойду", и начинается... "а может это сразу добавить" и тд

можете подсказать, как перейти сразу к бэкэнду, не описывая сложные структуры руками хард-кодом?
источник

к

кана in Compiler Development
да, это чуть сложнее чем просто распарсить, но зато не нужно упираться в парсер чтобы приступить к самому интересному
источник

AT

Alexander Tchitchigi... in Compiler Development
Nanopass
источник

к

кана in Compiler Development
так а что мешает его и самому построить

а потом дописать и парсер с анализом в конце, когда уже трансляция собственно будет готова
источник

AT

Alexander Tchitchigi... in Compiler Development
Тоже всегда так делаю! 😂
источник

AT

Alexander Tchitchigi... in Compiler Development
На любом более-менее приличном современном языке AST руками пишется почти так же, как и конкретный синтаксис. 🤷‍♀️
источник

AT

Alexander Tchitchigi... in Compiler Development
Если, прям, очень влом, можно shallow embedding сделать и писать комбинаторы.
источник

РС

Роман Соловьев... in Compiler Development
ненене, в моем понимании синтаксический анализатор запрашивает набор токенов у лексического анализатора и по ним строит аст. А зачем в данном случае нам писать AST руками?

если мы пропускаем лексический анализатор - то мы должны заполнить массив токенов и пусть синтаксический анализатор из него дергает.

я это пишу без претензий, а пытаюсь понять для себя, значит я что-то не так понимаю
источник

h

hazer_hazer in Compiler Development
а как же быть со спанами, доп структурами, которые может быть сложновато привязать к аст.

ну вот к примеру, есть AST, а также потом генерится стак скоупов (ну или rib'ов), к этому добавляются ещё какие-нибудь вещи вспомогательные...

или вы имеете в виду, именно только первый этап с парсингом пропустить, а не весь high-middle левелы?
источник

AT

Alexander Tchitchigi... in Compiler Development
Если ещё более влом и пишешь на Haskell — быстренько соорудить себе Free Monad и писать свои программы в do-нотации. 😂
источник

к

кана in Compiler Development
можно отложить синтаксический анализ на конец
источник

РС

Роман Соловьев... in Compiler Development
ааа, а приступить сразу к семантике и т.д.?
источник

к

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

РС

Роман Соловьев... in Compiler Development
теперь понял, спасибо)
источник

к

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

AT

Alexander Tchitchigi... in Compiler Development
Первый этап с парсингом. Если нет конкретного синтаксиса — спаны не нужны. Можно потом добавить.
источник

РС

Роман Соловьев... in Compiler Development
тогда понимаю, первые два этапа самые объемные😃

я ещё решил First Follow автоматически заполнять из грамматики, вообще в ад превратилось: пришлось ещё писать парсер грамматики
источник