Size: a a a

Compiler Development

2021 March 05

YS

Yaroslav Schekin in Compiler Development
По-моему, @MRSMITH4 требуется внимание модераторов, что Вы с ним спорите?
источник

K

Kir in Compiler Development
MrSmith
Это все lsp
Использующие tree-sitter для рабора текста
источник

M

MrSmith in Compiler Development
Два проекта написанные энтузиастами как я понимаю
источник

K

Kir in Compiler Development
Yaroslav Schekin
По-моему, @MRSMITH4 требуется внимание модераторов, что Вы с ним спорите?
Не, ну как только появятся стикеры с собаками, то я сразу буду за
источник

M

MrSmith in Compiler Development
Yaroslav Schekin
По-моему, @MRSMITH4 требуется внимание модераторов, что Вы с ним спорите?
Это ваше личное мнение
источник

YS

Yaroslav Schekin in Compiler Development
MrSmith
Это ваше личное мнение
Да, это моё личное мнение.
Я считаю, что когда человек просто игнорирует фактические доводы оппонентов, в дискуссии ему не место.
И что ему в принципе стоит изменить своё поведение, если он хочет, чтобы его не игнорировали коллеги.
источник

M

MrSmith in Compiler Development
За всех говорить не нужно, если вы считаете что ide нужна в основном для подсветки и затем ее люди и покупают, ну чтож ваше мнение.
То что ваши доводы не состоятельны и вы не хотите признавать что серьезные зрелые проекты это не используют это тоже ваше мнение.
Меня втягивать дальше в этот бред не нужно, для меня ide не про подсветку. Напишите админам в личку или в спорт лото если вас так задевает тот факт, что коммерчески проект никому не интересен
источник

AT

Alexander Tchitchigi... in Compiler Development
Yaroslav Schekin
Да, это моё личное мнение.
Я считаю, что когда человек просто игнорирует фактические доводы оппонентов, в дискуссии ему не место.
И что ему в принципе стоит изменить своё поведение, если он хочет, чтобы его не игнорировали коллеги.
Вы можете самостоятельно, без помощи модераторов, НЕ отвечать на сообщения, на которые Вы отвечать не хотите. Более того, Вы можете даже НЕ ЧИТАТЬ эти сообщения. 😉
источник

M

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

AT

Alexander Tchitchigi... in Compiler Development
MrSmith
Именно, и не продолжать дискуссию с жалобами что весь мир не справедлив и с вами не согласны
Вы-то тоже не умничайте, я Ваши сообщения уже давно перестал читать. 😊
источник

YS

Yaroslav Schekin in Compiler Development
Alexander Tchitchigin
Вы можете самостоятельно, без помощи модераторов, НЕ отвечать на сообщения, на которые Вы отвечать не хотите. Более того, Вы можете даже НЕ ЧИТАТЬ эти сообщения. 😉
А модераторы могут исполнять свои функции, а не давать "разжигать" эту чушь в чате (чтобы её "с удовольствием" читали остальные 1000 участников). Более того, Вы можете даже удалить бессмысленные сообщения.
Ну так, просто к сведению.
источник

AT

Alexander Tchitchigi... in Compiler Development
Yaroslav Schekin
А модераторы могут исполнять свои функции, а не давать "разжигать" эту чушь в чате (чтобы её "с удовольствием" читали остальные 1000 участников). Более того, Вы можете даже удалить бессмысленные сообщения.
Ну так, просто к сведению.
Предлагаете с Ваших сообщений и начать? 😉
источник

YS

Yaroslav Schekin in Compiler Development
Alexander Tchitchigin
Предлагаете с Ваших сообщений и начать? 😉
Если Вы там найдёте что-то без бессмысленное — удаляйте смело.
С другой стороны, что-либо запретить Вам я всё равно не могу, так что просто совет.
источник

f

for(int c; (c = getc... in Compiler Development
Не могли бы вы порекомендовать литературы по реализации инкрементальной проверки типов и вообще общей структуры реализации компилятора если я хочу сразу делать поддержку IDE/LSP.

Я начал писать игрушечный язык, для того чтобы окончательно разобраться в том как все устроено (парсер/лексер/тайпчек/интерпретация/компиляция в х86/поддержка IDE), но я не совсем понимаю как лучше всего собственно реализовывать все. Из https://www.youtube.com/watch?v=wSdV1M7n4gQ&t=1818s и https://www.youtube.com/watch?v=74Y1n2v-gos&t=2106s я понял что большая часть принципов построения компиляторов слабо применима для работы IDE - в то время как при компиляции мы делаем полный проход по коду сверху вниз то для интерактивной работы мы фактически с нуля (с какими-то оптимизациями) собираем только нужную нам информацию.

Таким образом получается после CST/AST уже практически никаких схожих элементов нет, и фактически я пишу две разные программы, но может быть какие-то вещи которые я упустил.

И еще по поводу написания рекурсивного спуска - https://news.ycombinator.com/item?id=13915150 - я правильно понимаю что в конечном итоге если я хочу делать компилятор и IDE то можно переиспользовать парсер, только добавил поддержку инкрементального разбора? И если да то как это лучше всего сделать - я посмотрел но не нашел ничего про то как добавить это (есть вещи типа "A simple and efficient incremental LL(1) parsing", но там про табличные парсеры). Кидаться в код каких-то промышленных компиляторов (типа rustc или roslyn) я пока еще не готов, особенно если стоит вопрос просто общего понимания принципов.

Про tree-sitter знаю, но хотелось бы все же не делать два разных AST без острой на то необходимости.
источник

AG

Alex Gryzlov in Compiler Development
for(int c; (c = getchar()) != EOF;)
Не могли бы вы порекомендовать литературы по реализации инкрементальной проверки типов и вообще общей структуры реализации компилятора если я хочу сразу делать поддержку IDE/LSP.

Я начал писать игрушечный язык, для того чтобы окончательно разобраться в том как все устроено (парсер/лексер/тайпчек/интерпретация/компиляция в х86/поддержка IDE), но я не совсем понимаю как лучше всего собственно реализовывать все. Из https://www.youtube.com/watch?v=wSdV1M7n4gQ&t=1818s и https://www.youtube.com/watch?v=74Y1n2v-gos&t=2106s я понял что большая часть принципов построения компиляторов слабо применима для работы IDE - в то время как при компиляции мы делаем полный проход по коду сверху вниз то для интерактивной работы мы фактически с нуля (с какими-то оптимизациями) собираем только нужную нам информацию.

Таким образом получается после CST/AST уже практически никаких схожих элементов нет, и фактически я пишу две разные программы, но может быть какие-то вещи которые я упустил.

И еще по поводу написания рекурсивного спуска - https://news.ycombinator.com/item?id=13915150 - я правильно понимаю что в конечном итоге если я хочу делать компилятор и IDE то можно переиспользовать парсер, только добавил поддержку инкрементального разбора? И если да то как это лучше всего сделать - я посмотрел но не нашел ничего про то как добавить это (есть вещи типа "A simple and efficient incremental LL(1) parsing", но там про табличные парсеры). Кидаться в код каких-то промышленных компиляторов (типа rustc или roslyn) я пока еще не готов, особенно если стоит вопрос просто общего понимания принципов.

Про tree-sitter знаю, но хотелось бы все же не делать два разных AST без острой на то необходимости.
источник

K

Kir in Compiler Development
for(int c; (c = getchar()) != EOF;)
Не могли бы вы порекомендовать литературы по реализации инкрементальной проверки типов и вообще общей структуры реализации компилятора если я хочу сразу делать поддержку IDE/LSP.

Я начал писать игрушечный язык, для того чтобы окончательно разобраться в том как все устроено (парсер/лексер/тайпчек/интерпретация/компиляция в х86/поддержка IDE), но я не совсем понимаю как лучше всего собственно реализовывать все. Из https://www.youtube.com/watch?v=wSdV1M7n4gQ&t=1818s и https://www.youtube.com/watch?v=74Y1n2v-gos&t=2106s я понял что большая часть принципов построения компиляторов слабо применима для работы IDE - в то время как при компиляции мы делаем полный проход по коду сверху вниз то для интерактивной работы мы фактически с нуля (с какими-то оптимизациями) собираем только нужную нам информацию.

Таким образом получается после CST/AST уже практически никаких схожих элементов нет, и фактически я пишу две разные программы, но может быть какие-то вещи которые я упустил.

И еще по поводу написания рекурсивного спуска - https://news.ycombinator.com/item?id=13915150 - я правильно понимаю что в конечном итоге если я хочу делать компилятор и IDE то можно переиспользовать парсер, только добавил поддержку инкрементального разбора? И если да то как это лучше всего сделать - я посмотрел но не нашел ничего про то как добавить это (есть вещи типа "A simple and efficient incremental LL(1) parsing", но там про табличные парсеры). Кидаться в код каких-то промышленных компиляторов (типа rustc или roslyn) я пока еще не готов, особенно если стоит вопрос просто общего понимания принципов.

Про tree-sitter знаю, но хотелось бы все же не делать два разных AST без острой на то необходимости.
> добавил поддержку инкрементального разбора

Вот как бы тут-то собака и зарыта: стандартные генераторы парсеров, я боюсь, либо так не умеют, либо умеют в "режиме паники".

Я рекомендую не мучиться с LL(1), а сделать LR/LALR-грамматику на yacc/menhir/happy. На каком языке планируете писать, кстати?
источник

f

for(int c; (c = getc... in Compiler Development
Kir
> добавил поддержку инкрементального разбора

Вот как бы тут-то собака и зарыта: стандартные генераторы парсеров, я боюсь, либо так не умеют, либо умеют в "режиме паники".

Я рекомендую не мучиться с LL(1), а сделать LR/LALR-грамматику на yacc/menhir/happy. На каком языке планируете писать, кстати?
Я не мучался с LL(1) а просто сделал рукописный нисходящий парсер (в общей сложности примерно 220 строк, потом максимум прибавится еще сотня от силы - язык намеренно очень простой - циклы/функции/структуры).

То что уже есть написано на nim, выбрал в основном так как хорошо знаю и язык отлично подходит для задачи как мне кажется.

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

RS

Rifat S in Compiler Development
Если вам интересно сделать это самому вручную, то можете почитать принципы создания инкрементального компилятора здесь: https://www.research-collection.ethz.ch/bitstream/handle/20.500.11850/145958/eth-24892-01.pdf?sequence=1&isAllowed=y
источник

f

for(int c; (c = getc... in Compiler Development
Я правильно понимаю что в этом случае мне нужно будет реализовать компилятор как граф зависимостей (с кешированным исполнением) для задач, в конце которого будет стоять "скомпилировать", которое рекурсивно потянет за собой все остальное?

И поддержка IDE в таком случае это будет просто запрос на требуемую информациию (тип переменной + необходимые таблицы для типов чтобы сделать автодополнение полей и прочее), или изменение исходных данных (сам код) пользователем.
источник

AG

Alex Gryzlov in Compiler Development
да, что-то такое
источник