185 похожих чатов

Я вот задумался над тем, чтобы переписать свой интерпрететор (сейчас

это простой tree-walking интерпрететор в CPS стиле) с использованием байткода и виртуальной машины. Свой интерпретатор я изначально делал не правильно, сейчас он парсит s-выражения, а магические конструкции просто определены в глобальном окружении как макросы и все прекрасно работает. Но возникает проблема, если генерировать байткод, синтаксически вызов функции и макроса одинаковы, но байткод для них очевидно должен быть разный, т.к. при аргументы макроса не нужно исполнять. Как вообще такое решается на данном этапе, когда синтаксис одинаковый, но семантика зависит от окружения?

5 ответов

17 просмотров

1. Парсим синтаксис, получаем AST 2. Анализируем AST, в частности и в особенности строим таблицу символов, по которой узнаём, кто функция, кто макрос, а кто просто переменная 3. Оптимизируем (опционально) 4. Генерируем нужный байт-код, глядя в таблицу символов чтобы узнать кто есть кто 5. ... 6. PROFIT!!!!111

Alexander Chichigin
1. Парсим синтаксис, получаем AST 2. Анализируем A...

А разве таблица символов не строится во время парсинга синтаксиса? Или не всегда?

Антонидзе Кучпилип
А разве таблица символов не строится во время парс...

Это что, если все объявления раньше использований? Откуда иначе информация об имени возьмётся?

Alexander Chichigin
Это что, если все объявления раньше использований?...

А как использования относятся к построению таблицы символов? Кроме случая, когда есть вывод типов

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта