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 для контрактов на Лиго.
> А где у нас тут модераторы, можно принять меры уже?
Ну он же что-там пишет, вроде, я думаю, можно ограничиться предупреждением (и запретить стикеры с собаками).