Size: a a a

Compiler Development

2021 March 07

LA

Liber Azerate in Compiler Development
MrSmith
llc? Или дергать как то либу можно
Для LLVM IR или при чём тут llc?
источник

M

MrSmith in Compiler Development
Да я просто в программе строю IR хотелось бы как то строить не через баш
источник

LA

Liber Azerate in Compiler Development
MrSmith
Да я просто в программе строю IR хотелось бы как то строить не через баш
Ну можно клангом так и собирать, как обычно
источник

M

MrSmith in Compiler Development
Ребят а как линкером сделать elf ld -o test /lib/crt0.o test.o -lc
источник

M

MrSmith in Compiler Development
Кажется чего то нехватает
источник

M

MrSmith in Compiler Development
ld test.o -lc -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2
источник

M

MrSmith in Compiler Development
Когда передаю так запускается но крашится с SIGSEGV
источник

M

MrSmith in Compiler Development
Если собирать чем выше оно не исполняемое, подскажите чего не хватает?
источник

M

MrSmith in Compiler Development
источник

GK

Georgy Komarov in Compiler Development
MrSmith
Если собирать чем выше оно не исполняемое, подскажите чего не хватает?
Попробуй сделать: clang -v 1.c для hello world. В выхлопе будет команда линковщика со всеми аргументами. Из неё можно будет исключить всё ненужное.
Если у тебя llvm, эти же аргументы можно передать в lld::elf::link, если подключить lld как библиотеку. Вот минимальный пример.
источник

M

MrSmith in Compiler Development
Я уже нашел просто скинул ссылку, вдруг кто пишет тоже си like compiler
источник

РС

Роман Соловьев... in Compiler Development
Yaroslav Schekin
Не обязательно.
Но я не знаю, есть ли сейчас для LL-подобных (top-down) parsers какой-то принятый общий подход для обработки ошибок — если это интересует, поищите / подождите — может, подскажут.
Как обрабатывать лексические ошибки?) Подскажите, пожалуйста
источник

YS

Yaroslav Schekin in Compiler Development
Роман Соловьев
Как обрабатывать лексические ошибки?) Подскажите, пожалуйста
Например, падать. ;)
Если мы всё ещё про "классический" разбор с lexer → parser, то либо возвращать error token (и предусматривать его в грамматике (т.е. писать error rules), или просто завершать обработку текущей продукции), или просто "выкидывать" его (с ошибкой), или ... есть и более сложные методы.
В общем, я тут не специалист, опять-таки.
Может, кто-то посоветует?
источник

RN

Ruslan Neshta in Compiler Development
Роман Соловьев
Правильно ли я понимаю? Прошу советов

Как уже писал ранее, хочу написать универсальный лексико-синтаксический анализатор (лексический + синтаксический).

На входе: набор грамматик
На выходе: синтаксическое дерево, на узлы которого пользователь навешивает делегаты и делает что ему нужно.
Думаю это будет LL(1) - т.к. с рекурсивным спуском знаком лучше и он проще.

Читаю книгу дракона и пытаюсь составить для себя общую последовательность действий.

Поступают грамматики:

Для лексического анализатора:
1. из грамматик строится НКА, который затем преобразуется в ДКА (или сразу строится ДКА)
2.из ДКА строится таблица переходов

Для синтаксического анализатора:
1. из грамматик строится синтаксическая таблица разбора

Как это работает:
1. Лексический анализатор используя таблицу переходов читает входную строку  и передает лексемы синтаксическому анализатору
2. Синтаксический анализатор  используя свою таблицу разбора - строит дерево разбора


Где-то между ними обработка ошибок (не заканчивать работу после первой ошибки, а продолжать проверку)
я бы просто выводил все ошибки лексера а потом и парсера
плюс в том что сразу ошибки от обоих, но в этом же и минус - могут дублироваться или накапливаться
в любом случае компилятор не исправляет сами ошибки а лишь выводит сообщение
источник

AK

Andrei Kurosh in Compiler Development
Ruslan Neshta
я бы просто выводил все ошибки лексера а потом и парсера
плюс в том что сразу ошибки от обоих, но в этом же и минус - могут дублироваться или накапливаться
в любом случае компилятор не исправляет сами ошибки а лишь выводит сообщение
Большинство современных компиляторов так и делают, «до первой ошибки» кажется только php работает
источник

D

Danya in Compiler Development
Andrei Kurosh
Большинство современных компиляторов так и делают, «до первой ошибки» кажется только php работает
Ну так пхп же интепретируемый, нет?
источник

AK

Andrei Kurosh in Compiler Development
Danya
Ну так пхп же интепретируемый, нет?
Да, но дело не в этом. Так-то у него есть байткод, джит и все прочее
источник

D

Danya in Compiler Development
Andrei Kurosh
Да, но дело не в этом. Так-то у него есть байткод, джит и все прочее
Просто питон вроде тоже до первой ошибки работает?
источник

AK

Andrei Kurosh in Compiler Development
_работает_ или _парсит_?
источник

D

Danya in Compiler Development
То есть PHP сначала парсит, если все ок, то транслирует в байткод и байткод выполняет?
источник