Size: a a a

Compiler Development

2021 March 12

AT

Alexander Tchitchigi... in Compiler Development
/me читал (не полностью) две книги "про Haskell": "Жемчужины проектирования" и "Параллельное и конкурентное программирование".
источник

a

alez in Compiler Development
Alexander Tchitchigin
/me изучал и в большой степени изучил Haskell, когда книжек по нему не было вообще...
me также. Мне кажется, имея опыт в программировании, хаскель не так уж и сложно расковырять самому
источник

DG

Denis Gabidullin in Compiler Development
Вроде, ещё не баян:
https://www.linux.org.ru/news/opensource/16203721
источник

AT

Alexander Tchitchigi... in Compiler Development
alez
me также. Мне кажется, имея опыт в программировании, хаскель не так уж и сложно расковырять самому
Не, "опыт в программировании" больше мешает... Даже знакомство с Common Lisp мне не помогло. Вот OCaml сильно помог, но тоже не на 100%, всё равно было больно "переламываться"...
источник

МР

Максим Резник... in Compiler Development
Пытаюсь разобраться с LLVM IR. С удивлением для себя обнаружил, что каждый фронтенд должен самостоятельно реализовывать целевой ABI. Это действительно так? Или я что-то не так понимаю?
источник

МР

Максим Резник... in Compiler Development
Если более конкретно, допустим я хочу вызвать (сгенерить вызов) функции void f( struct{char* s;int low,high;} p); Смотрю, что clang генерит два параметра, соответственно, если написать .ll вида define i32 @f({i8*, i32, i32} %0) {... то работать не будет
источник

TP

Tim Plotnikov in Compiler Development
Oriflame Holding AG
Всем привет! Нисходящим парсером возможно реализовать разбор конструкций при которых нужно заглядывать на n токенов вперёд?

Наведу простой пример, vector<int64>() - expression, мы считываем токен Ident vector, затем следует токен Less < и у нас дилемма. То ли это InfixExpr (0 < 1), или же CallExpr ( vector<int64>(args) ) . При восходящем парсере это возможно было бы реализовать сверткой, но для этого требуется использовать уже существующие парсер-генераторы или писать свой (чего я не могу сделать, так как знаний очень мало в этой теме). Хотелось бы использовать LL(k) парсер, так как я его уже написал и хотелось бы его модифицировать под этим цели.
Знающие люди поправьте меня, но с вашим примером должно получится примерно следующее же.
Делая предположение что лексинг и парсинг это две разные стадии, получаем:

Lexing
- - -
vector<int64>() =
IDENTIFIER «vector»
LESS
IDENTIFIER «int64»
GREATER
LEFT_PAREN
RIGHT_PAREN
- - -


Имея такой набор токенов можно дальше сделать проверку типа такую: Если текущий токен = LESS, то попытаться распарсить следующую последовательность как (IDENTIFIER | (IDENTIFIER «,»)) GREATER. Если получилось то гуд. Если нет, то вернуться на токен LESS и парсить пробовать Infix
источник

TP

Tim Plotnikov in Compiler Development
А если у вас в языке возможен только 1 параметр-тип, то вообще делать ничего не надо особо
источник
2021 March 13

O

Oriflame Holding AG in Compiler Development
Tim Plotnikov
А если у вас в языке возможен только 1 параметр-тип, то вообще делать ничего не надо особо
Да, верно. Но для этого нужно реализовать функцию отката к заданному токену.
источник

TP

Tim Plotnikov in Compiler Development
Oriflame Holding AG
Да, верно. Но для этого нужно реализовать функцию отката к заданному токену.
Думаю без такой функции вам будет тяжело парсер писать)
источник

[

[BRM]White Rabbit in Compiler Development
/me
источник

[

[BRM]White Rabbit in Compiler Development
кх
источник

K

Kir in Compiler Development
Oriflame Holding AG
Да, верно. Но для этого нужно реализовать функцию отката к заданному токену.
источник

K

Kir in Compiler Development
откат там через try()
источник

M

MrSmith in Compiler Development
Llhd llpm вроде есть кстати
источник

ДК

Дмитрий К in Compiler Development
Oriflame Holding AG
Всем привет! Нисходящим парсером возможно реализовать разбор конструкций при которых нужно заглядывать на n токенов вперёд?

Наведу простой пример, vector<int64>() - expression, мы считываем токен Ident vector, затем следует токен Less < и у нас дилемма. То ли это InfixExpr (0 < 1), или же CallExpr ( vector<int64>(args) ) . При восходящем парсере это возможно было бы реализовать сверткой, но для этого требуется использовать уже существующие парсер-генераторы или писать свой (чего я не могу сделать, так как знаний очень мало в этой теме). Хотелось бы использовать LL(k) парсер, так как я его уже написал и хотелось бы его модифицировать под этим цели.
По этой причине, кстати, в D отказались от угловых скобочек для обрамления статических параметров в пользу круглых и квадратных, которые всегда парные и не являются самостоятельными инфиксными операторами.
источник

AT

Alexander Tchitchigi... in Compiler Development
The Soviet 8080 Processor – The 580
Article, Comments
источник

IP

Iaroslav Postovalov in Compiler Development
Дмитрий К
По этой причине, кстати, в D отказались от угловых скобочек для обрамления статических параметров в пользу круглых и квадратных, которые всегда парные и не являются самостоятельными инфиксными операторами.
И получили те же проблемы относительно indexing operator
источник

ДК

Дмитрий К in Compiler Development
Iaroslav Postovalov
И получили те же проблемы относительно indexing operator
А какие с ним проблемы? Синтаксически то и то - массив.
источник

IP

Iaroslav Postovalov in Compiler Development
Дмитрий К
А какие с ним проблемы? Синтаксически то и то - массив.
Ну lookahead в парсере действительно не нужен, но выглядит очень двусмысленно
источник