Size: a a a

Compiler Development

2020 June 20

RB

Rustem B. in Compiler Development
ок, сяб
источник

А

Алексей ayaye :)... in Compiler Development
Rustem B.
а это не может быть на уровне ОС? ну, через syscall?
аргументы лежат в адресном пространстве процесса, syscall не нужен
источник

А

Алексей ayaye :)... in Compiler Development
execve все готовит (исполнимый образ и аргументы) и передает управление на entry point
источник

А

Алексей ayaye :)... in Compiler Development
источник

RB

Rustem B. in Compiler Development
хмм, ладно, плкапаю
источник

E

Eugene in Compiler Development
Rustem B.
какими C функциями можно получить кол-во аргументов переданных программе и сами аргументы?
ну, типа, компилятор такой, например
int main(int argc, const char *argv) {
  // ...
}


вот как компилятору брать эти argc и argv?
в смысле? вот же, есть параметр int argc — вот в нём и указано кол-во аргументов программы...
источник

RB

Rustem B. in Compiler Development
Eugene
в смысле? вот же, есть параметр int argc — вот в нём и указано кол-во аргументов программы...
я не использую C как кодогенерацию
источник

IJ

Igor 🐱 Jirkov in Compiler Development
Rustem B.
какими C функциями можно получить кол-во аргументов переданных программе и сами аргументы?
ну, типа, компилятор такой, например
int main(int argc, const char *argv) {
  // ...
}


вот как компилятору брать эти argc и argv?
начинается выполнение программы со _start. Сделайте условный hello world , запустите gdb, поставьте breakpoint на _start и изучите стек и регистры на предмет того, где что :) ответ, конечно, зависит от платформы.
источник

RB

Rustem B. in Compiler Development
и от backand'а
источник

IJ

Igor 🐱 Jirkov in Compiler Development
Вот с этими crt0 , crt1 и тд надо осторожно: оно зависит от вообще всего.
источник

А

Алексей ayaye :)... in Compiler Development
Igor 🐱 Jirkov
Вот с этими crt0 , crt1 и тд надо осторожно: оно зависит от вообще всего.
так это же ниже их. crt как раз берут этот результат подготавливают всё и вызывают main
источник

IJ

Igor 🐱 Jirkov in Compiler Development
Алексей ayaye :)
так это же ниже их. crt как раз берут этот результат подготавливают всё и вызывают main
Ниже чего? crt = C runtime. Мысль в том, что конкретный исполняемый файл можно и полезно изучить, но все, что связано с crt,  завязано на компилятор, платформу и стандартную библиотеку
источник

А

Алексей ayaye :)... in Compiler Development
Igor 🐱 Jirkov
Ниже чего? crt = C runtime. Мысль в том, что конкретный исполняемый файл можно и полезно изучить, но все, что связано с crt,  завязано на компилятор, платформу и стандартную библиотеку
может, вы не тому ответили? я не призывал изучать crt.
источник

RB

Rustem B. in Compiler Development
какие есть ещё легковесные бэкенды помимо QBE?
источник

B

Bulba in Compiler Development
а что именно хочешь сделать? не хочешь линкерить libc? можно же сделать свой main и линкер склеит его с libc и передаст в твой main аргументы
источник

АК

Андрей Казанцев... in Compiler Development
Зачем нужен лексер и в каких случаях без него не обойтись?
источник

K

Kir in Compiler Development
Андрей Казанцев
Зачем нужен лексер и в каких случаях без него не обойтись?
Лексер нужен для разгрузки сложности парсера. Обойтись без него можно, но тогда придётся делать это же самое в разных точках парсера.
Без лексера сложно обойтись при использовании каких-нибудь yacc/bison/happy
источник

АК

Андрей Казанцев... in Compiler Development
Kir
Лексер нужен для разгрузки сложности парсера. Обойтись без него можно, но тогда придётся делать это же самое в разных точках парсера.
Без лексера сложно обойтись при использовании каких-нибудь yacc/bison/happy
Ясно, просто увидел грамматику чисел и не понял зачем. Разве не лексер должен их находить? Отсюда и вопрос.
источник

А

Алексей ayaye :)... in Compiler Development
Андрей Казанцев
Ясно, просто увидел грамматику чисел и не понял зачем. Разве не лексер должен их находить? Отсюда и вопрос.
Традиционно для  лексера использовались регулярные выражения,  а для парсеров - кс грамматики. но для лексера тоже можно использовать кс-грамматику, в antlr так и делается.
источник

АК

Андрей Казанцев... in Compiler Development
Алексей ayaye :)
Традиционно для  лексера использовались регулярные выражения,  а для парсеров - кс грамматики. но для лексера тоже можно использовать кс-грамматику, в antlr так и делается.
Прямо на следующий вопрос ответили)
источник