Size: a a a

Compiler Development

2021 June 03

K

Kir in Compiler Development
Я делал распечатку, чтобы оно походило на нотацию в драгонбуке и было разноцветным, чтобы быстро вычленять текст
источник

h

hazer_hazer in Compiler Development
Я вот кстати, так до конца с LR не разобрался. Понимаю логику алгоритма, но никогда не писал и не работал с LR.
И мне вот интересно — в issue'сах раста я видел, что им приходится в парсер добавлять LR, так как LL не справляется, но я так и не понял что за синтаксис ломает парсер. Кто-нибудь знает?
просто возможно я пропускаю какие-то кейсы, которые, как мне кажется, я могу LL спарсить, а окажется, что нет
источник

K

Kir in Compiler Development
LL не может в правила вида Add -> Add + Mult
источник

h

hazer_hazer in Compiler Development
left-corner можно же? но без красивых резолюций
источник

K

Kir in Compiler Development
Можно, если руками делать подъём вместо спуска
источник

h

hazer_hazer in Compiler Development
ну да. наверное это LR
источник

h

hazer_hazer in Compiler Development
меня сложно наверное будет заставить написать LL парсер без left-corner. Очень уж удобная вещь
источник

K

Kir in Compiler Development
The second set of positions will produce Reduce-s. For each terminal (for instance, "+") that is in the lookahead set of the rule of that position, we generate:

haskell
{ currentState =>
 { "+" =>
   Reduce (Factor "*" Term . { mkR })
 }
}

Если так написать - лучше?
источник

K

Kir in Compiler Development
А, я понял, в чём проблема. Я в GOTO ещё отпиливаю лишнее от FOLLOW(R).
источник

A

Andrey in Compiler Development
Вот этого не хватает, да. И ещё из статьи непонятно, откуда появляются два состояния с одним ядром
источник
2021 June 04

K

Kir in Compiler Development
А ядро - это что? А то у меня терминология наполовину с драгонбука, наполовину самопальная
источник

f

fldlg2 in Compiler Development
[здесь была картинка-баян про области определения LL и LR]

Если под "LL комбинаторами" имеется в виду PEG, то это другая история.
источник

K

Kakadu in Compiler Development
Имеется в виду parsec-подобное. И там действительно другая история
источник

K

Kir in Compiler Development
Вот именно против parsec-а-то я и бугурчу.
источник

[

[BRM]White Rabbit in Compiler Development
Парсек уже написан, этим он хорош
источник

K

Kir in Compiler Development
Неоднократно приходилось извращаться, чтобы выразить грамматику вида Expr -> Expr Term для вызова функций, и однажды пришлось отлаживать чей-то парсер, который разбирал кортежи за O(exp(N))
источник

K

Kakadu in Compiler Development
Это Ваше личное мнение, некоторые ФП считают извращением.

Но все это не повод не упоминать в статье про LR, что некоторые видят соответствующие преимущества и недостатки у противоположного подхода
источник

K

Kir in Compiler Development
Хорошо, добавлю.
источник

KR

K R in Compiler Development
Может это и нормально? Леруа неоднократно писал, что в компиляторе Камла много N^2 алгоритмов. Просто в обычных программах этого достаточно.
источник

VK

Val Krylov in Compiler Development
Экспонента в парсере - как-то нетрадиционно, обычно эти грабли в вывод типов кладут.
источник