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

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

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

5 ответов

5 просмотров

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

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

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

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

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

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

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

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

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

Гайз, кто-нибудь пробовал запустить probe-rs под камень, которого нет в probe-rs? Мб есть какой-нибудь пример у кого... Через target-gen попробовал сгенерировать chip-descript...
Максим Смирнов
1
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Заметил в ghci 9.4.8: > :t (<*>) @((->)_) (<*>) @((->)_) :: (w -> (a -> b)) -> (w -> a) -> w -> b Разве не должно (w -> (a -> b)) быть записано как (w -> a -> b)? Это баг, ил...
Михаил
13
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
Any electron dev here?
Sayanth Tezro
12
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
так это может кто что знает или использует что-то как макбук только не макбук? на 13…14 дюймов
Michael
9
Карта сайта