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

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

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

26 ответов

58 просмотров

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

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

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

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

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

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

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

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

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

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

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). Так что хранить нужно только значения, не знаю кому какая метаинформация и зачем нужна...

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта