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

Какую структуру данных лучше всего использовать для symtable? Находил разные

варианты и с хэш таблицами и с деревьями и со стеком. Symtable если что для scheme. И ещё вопрос, я правильно понимаю, что нужно создавать ее отдельным проходом по аст, а не во время парсинга?

26 ответов

19 просмотров

Зависит от языка. Есть языки где парсинг от таблицы символов зависит, например все семейство Си-подобных языков

Mar Ort
Зависит от языка. Есть языки где парсинг от таблиц...

Ну меня как я сказал сейчас интересует схема

Для учебного интерпретатора — любую, хоть список пар. Берите стандартный BTreeMap или HashMap.

пошукач 🥝
а в каких не зависит?

в js например не зависит

Впрочем, если Вы спрашиваете про Symtable для реализации Environment, то нужно будет реализовать корректный name shadowing, т.е. всё равно стек в той или иной форме.

Просто хочется ознакомиться с best practice, не вижу в этом ничего плохого

oleja ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ
Просто хочется ознакомиться с best practice, не ви...

Брать структуры данных из стандартной библиотеки — best of the best practices. 👍

Alexander Chichigin
Брать структуры данных из стандартной библиотеки —...

А что насчёт момента создания symtable? В моем примере

oleja ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ
А что насчёт момента создания symtable? В моем при...

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

Mar Ort
Начните с простого — хэш таблицы, если с ней возни...

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

Mar Ort
организуйте из них стек

Из хэш таблиц? Как говорится все гениальное просто..

oleja ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ
Из хэш таблиц? Как говорится все гениальное просто...

ну да, когда входите в новый скоуп — пушите очередную таблицу в ваш стек, когда выходите — попаете. Поиск — сверху вниз (от текущего скоупа до корневого)

Только что насчёт этого, мне лично больше симпатичен второй вариант(отдельный проход по аст), но с другой стороны при парсинге это тоже не так трудно сделать, так как будет лучше? P.S. scheme (r7rs)

oleja ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ
Только что насчёт этого, мне лично больше симпатич...

Я бы сначала сделал отдельно, если окажется что оно достаточно органично объединяется и в этом есть какой-то смысл (например код станет проще) то смержите

Mar Ort
ну да, когда входите в новый скоуп — пушите очеред...

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

Dmitry Solomennikov
Тут ловушка есть (ну или соблазн). До генерации эт...

Оставьте человеку хоть что-то на самому подумать :)

oleja ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ
Только что насчёт этого, мне лично больше симпатич...

Вообще, напишите как-нибудь, а потом за учебники засядете, станет и проще, и интереснее

Dmitry Solomennikov
Тут ловушка есть (ну или соблазн). До генерации эт...

А можно пример, где окружение нужно при кодогененрации? Или вы про область видимости C/C++?

Василий
А можно пример, где окружение нужно при кодогененр...

Вложенные циклы с именованными метками, вложенные функции, если правильно помню, требовали живых таблиц имен на генерации.

Василий
А можно пример, где окружение нужно при кодогененр...

Вынос переменной цикла, генерация условий и т.д. Довольно много вообще требовало наличия и скоупов, и имён

Alexander Chichigin
Для учебного интерпретатора — любую, хоть список п...

Понятно, что ключами хранить идентификаторы, но какие метаданные хранить нужно в значении? Я видел пример игрушечного интерпретатора на расте, там хранили значение при инициализации, но мне кажется это не то, да и схема не статически типизируемая, чтобы хранить тип, не будет ли достаточно просто вектора при анализе?

oleja ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ
Понятно, что ключами хранить идентификаторы, но ка...

Не понял вопроса... Тип в Схеме — часть значения, там будет в духе Fixnum(1234). Так что хранить нужно только значения, не знаю кому какая метаинформация и зачем нужна...

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

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

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
что насчет пагинга? на осдеве непонятно(
Vi Chapmann 🪙
26
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Ребят, что лучше для реверса: гидра или ида?
En Vind Av Sorg
26
Делаю велосипед логгер. К сообщению хочу прикрутить некоторую информацию, типа, кем отправлено, какой уровень, и всякое такое. И тут подумалось мне, почему бы не хранить весь...
Serjone
24
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
если загрузчик efi? если сама PML4 PDPT PDT PT лежит в неудобном для меня месте?
Vi Chapmann 🪙
8
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
Карта сайта