Size: a a a

Compiler Development

2021 March 05

M

MrSmith in Compiler Development
Yaroslav Schekin
Я Вам показал, кто использует. Это Ваши коллеги (или нет, может быть? Вы сами-то программист?), между прочим, и Вы их только что обозвали "никто", и думаете, что это нормально, я правильно понял?
Да
источник

YS

Yaroslav Schekin in Compiler Development
MrSmith
Нет я клоун местный
Понятно, до свидания (я не киностудия "бисер для свиней").
А где у нас тут модераторы, можно принять меры уже?
источник

K

Kir in Compiler Development
Yaroslav Schekin
Конечно, нет.
Сейчас Вы просто хамите коллеге, а не участвуете в диалоге, по-моему.
Мне лично tree-sitter не очень нравится, кстати. Но факты — это совсем другое дело.
Я генератор LR-таблиц - вместе с отладкой - запилил часов за 10, неторопливо ковыряясь, по драгонбуку. Алгоритм там не то, чтобы сложный, главное понять, что во всех продукциях внутри замыкания мы находимся _одновременно_.

Левую рекурсию в PEG вкрячить сложнее, ящитаю.

Я не собираюсь писать парсеры для существующих языков, и поэтому считаю, что надо ограничивать себя LR(1) без всяких priorities, ambiguous choice а-ля PEG (что то же самое) и других "да хрен с ним, лишь бы работало" костылей.

Потом из-за этих авторазрешений и 20 приоритетов в разных местах придётся разбираться, почему let foo = fun (x) -> x y парсится как let foo = (fun (x) -> x) y (тру стори).

Вот, кстати, ренжи подшивать при редукции - это да, надо будет добавить.

> не самая большая грамматика

Я всё ещё считаю, что грамматика языка программирования должна состоять из ортогональных компонентов - возможно, со сглаживанием некоторых углов. И соответственно, огромной она быть не должна быть по определению.

> c++

С++ - это кладбище фичей и монстр Франкенштейна. Говорю как человек, который знает, как сделать в лямбде захват по перемещению и как вызвать конструктор в режиме размещения.

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

Да сколько бы не заняло. У рекурсивного спуска есть возможность писать грамматики, внезапно работающие за экспоненту для каких-то, как выясняется, не особо corner cases, и попытки это исправить приводят к тому, что приходится руками делать рекурсивный подъём в парсере этого куска. LR(1) гарантировано линеен. И если грамматика в этой форме (и не отвергается генератором таблиц), то она гарантировано же не содержит неоднозначностей.

> Вообшем смотреть апи надо у меня есть пунктов 5-6 которые желательно уметь парсер

Вот не знаю, на мой вкус парсер должен уметь делать CST с ренжами, причём из потока лексем (а не из текста), если мы про компиляторы.

> Потому что если я хочу что то изменить мне нужно аст

Это для рефактора а-ля Rename symbol? Ренжей в дереве достаточно, как мне кажется. А language server будет делаться просто пересовыванием грамматики в три-ситтер, после чего оно будет просто работать (с).

> Хоть один крупный компилятор или ide с ним есть?

С три-ситтером есть каждый language server под VSCode. Я сам такую штуку писал для языка Лиго. И, да, я не одобряю того, что TS, будучи GLR, молча разрешает конфликты сам.

> Я говорю покажите мне продукт rust analyzer, с# аналайзер, c++ аналайзер.

Все эти продукты нужны только потому, что это - отвратительные языки. C#/C++ - потому что это чёртовы свалки (С++ даже на лексемы без доп логики разобрать нельзя), а Rust - потому что попытка внести ручное управление память закончилась тем, что люди просто берут Arc чтобы борроу-чекер уже заткнулся наконец.

> Факты - его никто не использует.

Не может существовать фактов негативного утверждения. У меня есть коллеги, использующие написанное мной расширение на TS для контрактов на Лиго.

> А где у нас тут модераторы, можно принять меры уже?

Ну он же что-там пишет, вроде, я думаю, можно ограничиться предупреждением (и запретить стикеры с собаками).
источник

M

MrSmith in Compiler Development
Kir
Я генератор LR-таблиц - вместе с отладкой - запилил часов за 10, неторопливо ковыряясь, по драгонбуку. Алгоритм там не то, чтобы сложный, главное понять, что во всех продукциях внутри замыкания мы находимся _одновременно_.

Левую рекурсию в PEG вкрячить сложнее, ящитаю.

Я не собираюсь писать парсеры для существующих языков, и поэтому считаю, что надо ограничивать себя LR(1) без всяких priorities, ambiguous choice а-ля PEG (что то же самое) и других "да хрен с ним, лишь бы работало" костылей.

Потом из-за этих авторазрешений и 20 приоритетов в разных местах придётся разбираться, почему let foo = fun (x) -> x y парсится как let foo = (fun (x) -> x) y (тру стори).

Вот, кстати, ренжи подшивать при редукции - это да, надо будет добавить.

> не самая большая грамматика

Я всё ещё считаю, что грамматика языка программирования должна состоять из ортогональных компонентов - возможно, со сглаживанием некоторых углов. И соответственно, огромной она быть не должна быть по определению.

> c++

С++ - это кладбище фичей и монстр Франкенштейна. Говорю как человек, который знает, как сделать в лямбде захват по перемещению и как вызвать конструктор в режиме размещения.

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

Да сколько бы не заняло. У рекурсивного спуска есть возможность писать грамматики, внезапно работающие за экспоненту для каких-то, как выясняется, не особо corner cases, и попытки это исправить приводят к тому, что приходится руками делать рекурсивный подъём в парсере этого куска. LR(1) гарантировано линеен. И если грамматика в этой форме (и не отвергается генератором таблиц), то она гарантировано же не содержит неоднозначностей.

> Вообшем смотреть апи надо у меня есть пунктов 5-6 которые желательно уметь парсер

Вот не знаю, на мой вкус парсер должен уметь делать CST с ренжами, причём из потока лексем (а не из текста), если мы про компиляторы.

> Потому что если я хочу что то изменить мне нужно аст

Это для рефактора а-ля Rename symbol? Ренжей в дереве достаточно, как мне кажется. А language server будет делаться просто пересовыванием грамматики в три-ситтер, после чего оно будет просто работать (с).

> Хоть один крупный компилятор или ide с ним есть?

С три-ситтером есть каждый language server под VSCode. Я сам такую штуку писал для языка Лиго. И, да, я не одобряю того, что TS, будучи GLR, молча разрешает конфликты сам.

> Я говорю покажите мне продукт rust analyzer, с# аналайзер, c++ аналайзер.

Все эти продукты нужны только потому, что это - отвратительные языки. C#/C++ - потому что это чёртовы свалки (С++ даже на лексемы без доп логики разобрать нельзя), а Rust - потому что попытка внести ручное управление память закончилась тем, что люди просто берут Arc чтобы борроу-чекер уже заткнулся наконец.

> Факты - его никто не использует.

Не может существовать фактов негативного утверждения. У меня есть коллеги, использующие написанное мной расширение на TS для контрактов на Лиго.

> А где у нас тут модераторы, можно принять меры уже?

Ну он же что-там пишет, вроде, я думаю, можно ограничиться предупреждением (и запретить стикеры с собаками).
Я каждый раз слышу эту история, если ей следовать выходить что все авторы компиляторов дураки. Им все сделали, бери используй, нет сидят пишут руками
источник

K

Kir in Compiler Development
MrSmith
Я каждый раз слышу эту история, если ей следовать выходить что все авторы компиляторов дураки. Им все сделали, бери используй, нет сидят пишут руками
Не, их ошибка в том, что они превращают язык в свалку
источник

s

suhr in Compiler Development
Kir
Я генератор LR-таблиц - вместе с отладкой - запилил часов за 10, неторопливо ковыряясь, по драгонбуку. Алгоритм там не то, чтобы сложный, главное понять, что во всех продукциях внутри замыкания мы находимся _одновременно_.

Левую рекурсию в PEG вкрячить сложнее, ящитаю.

Я не собираюсь писать парсеры для существующих языков, и поэтому считаю, что надо ограничивать себя LR(1) без всяких priorities, ambiguous choice а-ля PEG (что то же самое) и других "да хрен с ним, лишь бы работало" костылей.

Потом из-за этих авторазрешений и 20 приоритетов в разных местах придётся разбираться, почему let foo = fun (x) -> x y парсится как let foo = (fun (x) -> x) y (тру стори).

Вот, кстати, ренжи подшивать при редукции - это да, надо будет добавить.

> не самая большая грамматика

Я всё ещё считаю, что грамматика языка программирования должна состоять из ортогональных компонентов - возможно, со сглаживанием некоторых углов. И соответственно, огромной она быть не должна быть по определению.

> c++

С++ - это кладбище фичей и монстр Франкенштейна. Говорю как человек, который знает, как сделать в лямбде захват по перемещению и как вызвать конструктор в режиме размещения.

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

Да сколько бы не заняло. У рекурсивного спуска есть возможность писать грамматики, внезапно работающие за экспоненту для каких-то, как выясняется, не особо corner cases, и попытки это исправить приводят к тому, что приходится руками делать рекурсивный подъём в парсере этого куска. LR(1) гарантировано линеен. И если грамматика в этой форме (и не отвергается генератором таблиц), то она гарантировано же не содержит неоднозначностей.

> Вообшем смотреть апи надо у меня есть пунктов 5-6 которые желательно уметь парсер

Вот не знаю, на мой вкус парсер должен уметь делать CST с ренжами, причём из потока лексем (а не из текста), если мы про компиляторы.

> Потому что если я хочу что то изменить мне нужно аст

Это для рефактора а-ля Rename symbol? Ренжей в дереве достаточно, как мне кажется. А language server будет делаться просто пересовыванием грамматики в три-ситтер, после чего оно будет просто работать (с).

> Хоть один крупный компилятор или ide с ним есть?

С три-ситтером есть каждый language server под VSCode. Я сам такую штуку писал для языка Лиго. И, да, я не одобряю того, что TS, будучи GLR, молча разрешает конфликты сам.

> Я говорю покажите мне продукт rust analyzer, с# аналайзер, c++ аналайзер.

Все эти продукты нужны только потому, что это - отвратительные языки. C#/C++ - потому что это чёртовы свалки (С++ даже на лексемы без доп логики разобрать нельзя), а Rust - потому что попытка внести ручное управление память закончилась тем, что люди просто берут Arc чтобы борроу-чекер уже заткнулся наконец.

> Факты - его никто не использует.

Не может существовать фактов негативного утверждения. У меня есть коллеги, использующие написанное мной расширение на TS для контрактов на Лиго.

> А где у нас тут модераторы, можно принять меры уже?

Ну он же что-там пишет, вроде, я думаю, можно ограничиться предупреждением (и запретить стикеры с собаками).
Приоритеты — добро, просто они должны быть явными, а не как в яке.
источник

K

Kir in Compiler Development
suhr
Приоритеты — добро, просто они должны быть явными, а не как в яке.
Явными - это как в Агде?
источник

s

suhr in Compiler Development
#[group(Mul > Add)]
Expr = { ... }
источник

s

suhr in Compiler Development
Вроде такого.
источник

s

suhr in Compiler Development
Kir
Явными - это как в Агде?
Нет, лучше как в свифте.
источник

s

suhr in Compiler Development
С частичным порядком и ошибкой, когда совмещают несовместимое.
источник

M

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

K

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

M

MrSmith in Compiler Development
Если бы мне сказали, ты что дурак? Вот в шарпах это используют, ноль вопросов, а так выйдет как всегда - смотри как класно разбирает json. Берешь а тебе не хватает фитчи X а разраб отвечаюший за модуль давно уволился/встретил архангела/спился
источник

YS

Yaroslav Schekin in Compiler Development
Kir
Я генератор LR-таблиц - вместе с отладкой - запилил часов за 10, неторопливо ковыряясь, по драгонбуку. Алгоритм там не то, чтобы сложный, главное понять, что во всех продукциях внутри замыкания мы находимся _одновременно_.

Левую рекурсию в PEG вкрячить сложнее, ящитаю.

Я не собираюсь писать парсеры для существующих языков, и поэтому считаю, что надо ограничивать себя LR(1) без всяких priorities, ambiguous choice а-ля PEG (что то же самое) и других "да хрен с ним, лишь бы работало" костылей.

Потом из-за этих авторазрешений и 20 приоритетов в разных местах придётся разбираться, почему let foo = fun (x) -> x y парсится как let foo = (fun (x) -> x) y (тру стори).

Вот, кстати, ренжи подшивать при редукции - это да, надо будет добавить.

> не самая большая грамматика

Я всё ещё считаю, что грамматика языка программирования должна состоять из ортогональных компонентов - возможно, со сглаживанием некоторых углов. И соответственно, огромной она быть не должна быть по определению.

> c++

С++ - это кладбище фичей и монстр Франкенштейна. Говорю как человек, который знает, как сделать в лямбде захват по перемещению и как вызвать конструктор в режиме размещения.

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

Да сколько бы не заняло. У рекурсивного спуска есть возможность писать грамматики, внезапно работающие за экспоненту для каких-то, как выясняется, не особо corner cases, и попытки это исправить приводят к тому, что приходится руками делать рекурсивный подъём в парсере этого куска. LR(1) гарантировано линеен. И если грамматика в этой форме (и не отвергается генератором таблиц), то она гарантировано же не содержит неоднозначностей.

> Вообшем смотреть апи надо у меня есть пунктов 5-6 которые желательно уметь парсер

Вот не знаю, на мой вкус парсер должен уметь делать CST с ренжами, причём из потока лексем (а не из текста), если мы про компиляторы.

> Потому что если я хочу что то изменить мне нужно аст

Это для рефактора а-ля Rename symbol? Ренжей в дереве достаточно, как мне кажется. А language server будет делаться просто пересовыванием грамматики в три-ситтер, после чего оно будет просто работать (с).

> Хоть один крупный компилятор или ide с ним есть?

С три-ситтером есть каждый language server под VSCode. Я сам такую штуку писал для языка Лиго. И, да, я не одобряю того, что TS, будучи GLR, молча разрешает конфликты сам.

> Я говорю покажите мне продукт rust analyzer, с# аналайзер, c++ аналайзер.

Все эти продукты нужны только потому, что это - отвратительные языки. C#/C++ - потому что это чёртовы свалки (С++ даже на лексемы без доп логики разобрать нельзя), а Rust - потому что попытка внести ручное управление память закончилась тем, что люди просто берут Arc чтобы борроу-чекер уже заткнулся наконец.

> Факты - его никто не использует.

Не может существовать фактов негативного утверждения. У меня есть коллеги, использующие написанное мной расширение на TS для контрактов на Лиго.

> А где у нас тут модераторы, можно принять меры уже?

Ну он же что-там пишет, вроде, я думаю, можно ограничиться предупреждением (и запретить стикеры с собаками).
> и поэтому считаю, что надо ограничивать себя LR(1) без всяких priorities, ambiguous choice а-ля PEG (что то же самое) и других "да хрен с ним, лишь бы работало" костылей.

В этом случае да, очень привлекательно то, что есть хорошие гарантии — выявление неоднозначных грамматик, работа на декларативном уровне, т.е. понятно, что разбирается (а не, как бывает с рекурсивным спуском и т.п., что ошибки в синтаксисе самого языка, или "зависание" разбора и т.п. находят только пользователи), да и разбор за O(N) (при адекватной tokenization), в конце концов.

> И, да, я не одобряю того, что TS, будучи GLR, молча разрешает конфликты сам.

Да, неоднозначные грамматики он не выявляет, это минус... но что поделаешь?

> я думаю, можно ограничиться предупреждением (и запретить стикеры с собаками).

Да, было бы замечательно. Особенно, последнее. :)
источник

M

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

K

Kir in Compiler Development
MrSmith
Если бы мне сказали, ты что дурак? Вот в шарпах это используют, ноль вопросов, а так выйдет как всегда - смотри как класно разбирает json. Берешь а тебе не хватает фитчи X а разраб отвечаюший за модуль давно уволился/встретил архангела/спился
Я не распарсил.
источник

M

MrSmith in Compiler Development
Никто tree-siter не использует в ide или компиляторах, только neovim для подсветки.
А да atom вроде похоронили, так что не пример вообше
источник

K

Kir in Compiler Development
MrSmith
Никто tree-siter не использует в ide или компиляторах, только neovim для подсветки.
А да atom вроде похоронили, так что не пример вообше
источник

M

MrSmith in Compiler Development
Это все lsp
источник