Size: a a a

Compiler Development

2020 June 08

PS

Peter Sovietov in Compiler Development
Ivan Kochurkin
Когда токенов нет, это значит, что "токеном" является каждый символ текста. В большинстве случаев в этом нет смысла (за исключением какого-нибудь Markdown).

Если взять более менее сложный язык, то там скорее всего встретятся подобные штуки:

rule
   : subrule
   | A B
   ;

subrule
   : A C
   ;

Если при парсинге rule сфейлились на subrule, то по крайней мере не надо перевычислять токен A, когда попадаем во вторую альтернативу.

Возможно в большинстве случаев фазу лексинга можно заинлайнить прямо в парсер, но от этого токены же не исчезнут.
Проблема в том, что каждый говорит о своем :) Например, со стороны может быть неясно, почему нам надо что-то перевычислять, если у нас, как выше говорилось, LR(k) парсер, который работает за O(n)  ;)
источник

p

polunin.ai in Compiler Development
а есть сравнения jvm и clr? есть идея компилировать свой язык в одну их них, хочу сравнить
источник

AD

Artyom Drozdov in Compiler Development
для jvm есть truffle, должно помочь очень быстро запустить под jvm свой язык
источник

p

polunin.ai in Compiler Development
признателен, посмотрю
источник

AT

Alexander Tchitchigi... in Compiler Development
polunin.ai
а есть сравнения jvm и clr? есть идея компилировать свой язык в одну их них, хочу сравнить
источник

IK

Ivan Kochurkin in Compiler Development
polunin.ai
тут можно заменить на
rule
 : A (B | C)
 ;
В этом случае возможно, но на самом деле не всегда.
источник

MO

Mar Ort in Compiler Development
Ощущение, что бенчмарки составлены безграмотно и измеряют неизвестно что
источник

M

MaxGraey in Compiler Development
Artyom Drozdov
для jvm есть truffle, должно помочь очень быстро запустить под jvm свой язык
Не для JVM а для Graal
источник

AD

Artyom Drozdov in Compiler Development
MaxGraey
Не для JVM а для Graal
в контексте вопроса взаимозаменяемо
источник

p

polunin.ai in Compiler Development
Ну мне все равно вряд ли подойдёт потому что саму джаву я не знаю совсем :)
источник
2020 June 09

λ

λoλdog in Compiler Development
MaxGraey
Не для JVM а для Graal
Ну кстати не совсем так, он вроде как и для обычной опенждк есть
источник

VK

Vladimir Kazanov in Compiler Development
Mar Ort
Ощущение, что бенчмарки составлены безграмотно и измеряют неизвестно что
Почему? Не думаю, что такого рода баловствоможет быть лучше оформлено. Главное, что можно вынести оттуда: данные Платформы технически похожи, порядок производительности близкий.

А детали типа миллисекунд сравнивать - дело неблагородное.
источник

IR

IC Rainbow in Compiler Development
polunin.ai
тут можно заменить на
rule
 : A (B | C)
 ;
Код от такого очень сильно теряет в читабельности. А без этого будет бэктрекинг и тормоза.

А факторизацию придётся в каждой точке делать, где есть несколько токенов с общим префиксом. Плюс может быть несколько префиксов разной длины и тогда токены вообще в фарш превращаются.
источник

IR

IC Rainbow in Compiler Development
polunin.ai
так парсинг это основное время работы компилятора. он должен быть в первую очередь быстрым, а насколько просто реализовать быстроту - дело другое.
Elaboration и кодогенерация легко съедят даже совсем тупой парсинг. Но нет смысла тратить бюджет тормозов, если можно довольно дёшево ускорить.
источник

IK

Ivan Kochurkin in Compiler Development
Vladimir Kazanov
Почему? Не думаю, что такого рода баловствоможет быть лучше оформлено. Главное, что можно вынести оттуда: данные Платформы технически похожи, порядок производительности близкий.

А детали типа миллисекунд сравнивать - дело неблагородное.
Потому что как бы например вот это: https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/regexredux-csharpcore-8.html Зачем сравнивать производительность нативных вызовов? В некоторых случаях используется unsafe и устаревшие конструкции языка, которые сейчас мало кто использует.
источник

MO

Mar Ort in Compiler Development
Vladimir Kazanov
Почему? Не думаю, что такого рода баловствоможет быть лучше оформлено. Главное, что можно вынести оттуда: данные Платформы технически похожи, порядок производительности близкий.

А детали типа миллисекунд сравнивать - дело неблагородное.
Как минимум, для чистоты эксперимента, бенч нужно делить на прогрев и замер
источник

YS

Yaroslav Schekin in Compiler Development
Vladimir Kazanov
Почему? Не думаю, что такого рода баловствоможет быть лучше оформлено. Главное, что можно вынести оттуда: данные Платформы технически похожи, порядок производительности близкий.

А детали типа миллисекунд сравнивать - дело неблагородное.
Потому, что они в некоторых случаях настолько плохи, что:

> Главное, что можно вынести оттуда: ... порядок производительности близкий.

Может быть полной ерундой. Т.е. это не какие-то мелкие придирки.
источник

M

MaxGraey in Compiler Development
Ivan Kochurkin
Потому что как бы например вот это: https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/regexredux-csharpcore-8.html Зачем сравнивать производительность нативных вызовов? В некоторых случаях используется unsafe и устаревшие конструкции языка, которые сейчас мало кто использует.
[DllImport("pcre2-8", EntryPoint = "pcre2_jit_compile_8", CharSet = CharSet.Ansi)]
extern static int PcreJitCompile(IntPtr code, uint options);

Использовать PRCE2 вместо стандарных регулярок из System.Text.RegularExpressions это действительно читерство!
источник

p

polunin.ai in Compiler Development
В общем бенчмаркам верить нельзя, а полагаться следует на "чуйку")
источник

λ

λoλdog in Compiler Development
polunin.ai
В общем бенчмаркам верить нельзя, а полагаться следует на "чуйку")
Вы прям программист-медиум
источник