Size: a a a

Compiler Development

2020 July 08

IK

Ivan Kochurkin in Compiler Development
Я тут сравнил производительность леворекурсивных и обычных правил в ANTLR: https://github.com/KvanTTT/AntlrBenchmarks/tree/master/AntlrLeftRecursionBenchmark Оказалось, что обычные рвут леворекурсивные - они быстрее в 3 раза!

|               Method             |     Mean  |     Error       |    StdDev   | Ratio |
|    LeftRecursionTest     | 3.277 ms | 0.0636 ms | 0.0827 ms |  1.00 |
| NotLeftRecursionTest | 1.008 ms | 0.0178 ms | 0.0166 ms |  0.31 |

Придется, видимо, отказываться от левой рекурсии, если производительность парсера критична.
источник

AT

Alexander Tchitchigi... in Compiler Development
Не зря, значит, я несколько правил переписал без левой рекурсии. 😄
источник

AG

Alex Gryzlov in Compiler Development
на идрисе есть парсер который на уровне типов её запрещает :)
источник

AG

Alex Gryzlov in Compiler Development
источник

IK

Ivan Kochurkin in Compiler Development
У нас еще это окончательно решит проблему с восходящих построением дерева (ну и у всех, кто не строит дефолтное дерево, т.е. BuildParseTree = false), т.к. вся эта магия типа GetLeftChildFromLeftRecursiveRule и IsLeftRecursiveAlternative не понадобится.
источник

IK

Ivan Kochurkin in Compiler Development
А зачем ее запрещать на уровне типов?
источник

AG

Alex Gryzlov in Compiler Development
чтобы наслаждаться тотальностью
источник

AG

Alex Gryzlov in Compiler Development
т.е. гарантируется что каждый комбинатор что-то отъедает от входа, не может быть бесконечной рекурсии по построению
источник

К

Константин in Compiler Development
Как эпично тема в тему.
У нас рантайм на рекурсии упал с Max Call Stack

Технически хвостовая рекурсия может же быть бесконечной?
источник

АЕ

Артур Ефимов... in Compiler Development
Константин
Как эпично тема в тему.
У нас рантайм на рекурсии упал с Max Call Stack

Технически хвостовая рекурсия может же быть бесконечной?
конечно
источник

VS

Vasily Shapenko in Compiler Development
Константин
Как эпично тема в тему.
У нас рантайм на рекурсии упал с Max Call Stack

Технически хвостовая рекурсия может же быть бесконечной?
Тогда она не хвостовая же
источник

VM

Victor Miasnikov in Compiler Development
Vasily Shapenko
Тогда она не хвостовая же
Или хвостовая без оптимизации.
источник

KR

K R in Compiler Development
Еще есть хвостовая modulo cons. То есть, оптимизация, превращающая обычную функцию map в нежрущую стек.
источник

VS

Vasily Shapenko in Compiler Development
Victor Miasnikov
Или хвостовая без оптимизации.
Ну всегда считал, что хвостовая от обычной отличается именно оптимизацией
источник

К

Константин in Compiler Development
Vasily Shapenko
Ну всегда считал, что хвостовая от обычной отличается именно оптимизацией
хвостовая - это просто вызов является последней операцие
источник

АЕ

Артур Ефимов... in Compiler Development
Либо первым
источник
2020 July 09

ВК

Виктор Коровин... in Compiler Development
Alexander Tchitchigin
Не зря, значит, я несколько правил переписал без левой рекурсии. 😄
Вроде же есть автоматические алгоритмы по избавлению от левой рекурсии?
источник

AT

Alexander Tchitchigi... in Compiler Development
Виктор Коровин
Вроде же есть автоматические алгоритмы по избавлению от левой рекурсии?
Я таких не знаю. 🤷‍♀
Сомневаюсь, что они бы справились с той грамматикой, с которой я работаю. Там реальный трешачок. 😄
источник

К

Константин in Compiler Development
Лол.
Мне тут сказали что нахер нам не нужен инкрементальный компилятор.
Гони все сразу в JS. Подожди год пока оно собирется.
источник

ВК

Виктор Коровин... in Compiler Development
Alexander Tchitchigin
Я таких не знаю. 🤷‍♀
Сомневаюсь, что они бы справились с той грамматикой, с которой я работаю. Там реальный трешачок. 😄
Если не секрет, какой минимальный пример граммитики, который нельзя "исправить" этим алгоритмом? https://neerc.ifmo.ru/wiki/index.php?title=Устранение_левой_рекурсии
источник