Size: a a a

Compiler Development

2020 December 01

h

hazer_hazer in Compiler Development
trsfrm2smgen
понял)
Ну я свое мнение в дизайне описал. Если хочешь, можешь добавиться
источник

PS

Pavel Samolysov in Compiler Development
Сам думал как раз над вторым дизайном только с variant вместо юнион. В лексере из туториала mlir предлагают вариант где type содержит конкретный keyword, а в clang, если правильно помню есть таблица кейвордов, но тип у них общий: keyword.
источник

h

hazer_hazer in Compiler Development
Pavel Samolysov
Сам думал как раз над вторым дизайном только с variant вместо юнион. В лексере из туториала mlir предлагают вариант где type содержит конкретный keyword, а в clang, если правильно помню есть таблица кейвордов, но тип у них общий: keyword.
Я делал с вариантом изначально. Казалось удобно. Но сейчас все переделал
источник

PS

Pavel Samolysov in Compiler Development
Интересно ещё нужно ли в лексере разделение на string и integer, float, т.е. Должен ли он парсить литералы
источник

h

hazer_hazer in Compiler Development
Переслано от hazer_hazer
Так. Я так делал изначально.
И у меня с этим появились проблемы.

Во-первых, это было неудобно просто для парсера потом.
Во-вторых, что самое главно, это неправильно с точки зрения того, что должен делать лексер. Лексер не должен парсить инты, флоаты и тд. Это должен делать компилятор/интерпретатор, в зависимости от того, что делаешь
источник

h

hazer_hazer in Compiler Development
Привествую всех,не могу понять зачем к токену всегда добавляют запись из таблицы символов,вдруг токен описывает какой то оператор или операцию? (это написано в книге про компиляторы,где дракон нарисован 2 издание)
источник

h

hazer_hazer in Compiler Development
Переслано от hazer_hazer
Предположим ты добавил sized числа. Uint32, uint64 и тд

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

h

hazer_hazer in Compiler Development
Переслано от hazer_hazer
На самом деле это от реализации зависит. Можно разделить операторы и киворды. Но числа в юнионах на уровне токенов хранить не стоит.


Если у тебя на уровне парсинга важно знать, что токен это оператор, например, если у тебя есть оверрайд типа def +(), как в руби, то это может быть удобно. Но хз.

У меня определение оператор/киворд реализовано возможно не супер безопасно: у меня enum class TokenType: uint8_t, в котором токены сгруппированы и определяется по range от первого оператора до "не оператора"
источник

M

MrSmith in Compiler Development
Вопрос немного глупый как одиночный statement в ast перевести в SSA, чет ближе к вечеру совсем не соображаю, но очень уж хочется запустить сегодня генерацию. Извиняюсь за тупой вопрос просто только это и касты остались
источник

E

EgorBo in Compiler Development
MrSmith
Вопрос немного глупый как одиночный statement в ast перевести в SSA, чет ближе к вечеру совсем не соображаю, но очень уж хочется запустить сегодня генерацию. Извиняюсь за тупой вопрос просто только это и касты остались
что такое одиночный statement?
источник

M

MrSmith in Compiler Development
a = b + 127 * 900
источник

M

MrSmith in Compiler Development
Одиночный, если добавить ; будет одиночный expr
источник

E

EgorBo in Compiler Development
%tmp = mul 127, 900
%a = add %b, %tmp
:)
источник

M

MrSmith in Compiler Development
Это понятно
источник

M

MrSmith in Compiler Development
Как дерево обходить я про это
источник

E

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

E

EgorBo in Compiler Development
MrSmith
Как дерево обходить я про это
рекурсивно
источник

M

MrSmith in Compiler Development
Вот, а как не рекурсивно
источник

M

MaxGraey in Compiler Development
MrSmith
Вопрос немного глупый как одиночный statement в ast перевести в SSA, чет ближе к вечеру совсем не соображаю, но очень уж хочется запустить сегодня генерацию. Извиняюсь за тупой вопрос просто только это и касты остались
Это можно даже без построения CFG. Сдесь описано как
https://pp.ipd.kit.edu/uploads/publikationen/braun13cc.pdf
источник

E

EgorBo in Compiler Development
а в чем проблема с рекурсией?)
источник