Size: a a a

Compiler Development

2020 March 25

PS

Peter Sovietov in Compiler Development
Yaroslav Schekin
А, понял, извините.
Для конкретного языка — наверное, простая.
А сделать что/то более-менее универсальное (с приемлемым качеством) — совсем другое дело, мне кажется.
Универсальным условиям задач — универсальные решения! Берите нейросети :) Серьезно, ну как Вы универсально раскрасите код, например, на Форте?
источник

YS

Yaroslav Schekin in Compiler Development
Peter Sovietov
Универсальным условиям задач — универсальные решения! Берите нейросети :) Серьезно, ну как Вы универсально раскрасите код, например, на Форте?
А ведь "универсальные" (настраиваемые) highlighter-ы, между тем, существуют (хотя бы в некоторых текстовых редакторах).
Только внутри там "ужас", о котором я писал выше.
источник

PS

Peter Sovietov in Compiler Development
Yaroslav Schekin
А ведь "универсальные" (настраиваемые) highlighter-ы, между тем, существуют (хотя бы в некоторых текстовых редакторах).
Только внутри там "ужас", о котором я писал выше.
Вспомните, что существуют тьюринг-полные грамматики. И вот пишете Вы код, пишете... А потом — бац! И все зависло. Потому что раскраска ушла в бесконечный цикл :)
источник

ИЧ

Илья Чистяков in Compiler Development
Peter Sovietov
Вспомните, что существуют тьюринг-полные грамматики. И вот пишете Вы код, пишете... А потом — бац! И все зависло. Потому что раскраска ушла в бесконечный цикл :)
кстати о бесконечности, тут какая-то статья вышла на эту тему https://habr.com/ru/company/ruvds/blog/492502/ правда я не понял суть)
источник

YS

Yaroslav Schekin in Compiler Development
Peter Sovietov
Вспомните, что существуют тьюринг-полные грамматики. И вот пишете Вы код, пишете... А потом — бац! И все зависло. Потому что раскраска ушла в бесконечный цикл :)
А там не грамматики используются. ;)
И ничего не уходит в бесконечный цикл, насколько я знаю — что-то "криво" подсвечивается, что-то сильно тормозит — но более-менее приемлемый результат получается.
Так вот и интересно, как это делать "правильно", или хоть на реализацию чего я смотрю (хотя я сильно подозреваю, что это.. см. https://t.me/CompilerDev/60888 ). ;)
источник

PS

Peter Sovietov in Compiler Development
Yaroslav Schekin
А там не грамматики используются. ;)
И ничего не уходит в бесконечный цикл, насколько я знаю — что-то "криво" подсвечивается, что-то сильно тормозит — но более-менее приемлемый результат получается.
Так вот и интересно, как это делать "правильно", или хоть на реализацию чего я смотрю (хотя я сильно подозреваю, что это.. см. https://t.me/CompilerDev/60888 ). ;)
Я бы для начала более тщательно сформулировал желаемые критерии "универсальности". Тогда и можно будет выбрать методы решения конкретизированной задачи. Потому что в случае настоящей универсальности возникают неразрешимые трудности, как я показал выше :)
источник

YS

Yaroslav Schekin in Compiler Development
Peter Sovietov
Я бы для начала более тщательно сформулировал желаемые критерии "универсальности". Тогда и можно будет выбрать методы решения конкретизированной задачи. Потому что в случае настоящей универсальности возникают неразрешимые трудности, как я показал выше :)
Так меня существующие подходы в области более-менее универсального syntax highlighting интересуют.
Желаемые критерии мне не сильно помогут найти какие-то обзоры / общие подходы, разве нет?
А ведь проблеме-то много лет, и практические решения явно существуют. ;)
источник

АЗ

Алексей Запольский in Compiler Development
Yaroslav Schekin
А там не грамматики используются. ;)
И ничего не уходит в бесконечный цикл, насколько я знаю — что-то "криво" подсвечивается, что-то сильно тормозит — но более-менее приемлемый результат получается.
Так вот и интересно, как это делать "правильно", или хоть на реализацию чего я смотрю (хотя я сильно подозреваю, что это.. см. https://t.me/CompilerDev/60888 ). ;)
Так по ссылке на colorer есть pdf'ы там кратенько. Я посмотрел "Подсветка_синтаксиса" в википедии на разных языках - везде ссылки на разные ресурсы. На арабском - ссылка на блог Эвана Брукса. Так и не понятно, нужна подсветка только ключевых слов с разбивкой по категориям или синтаксический анализ с определением по правилам грамматик?
источник

PS

Peter Sovietov in Compiler Development
Yaroslav Schekin
Так меня существующие подходы в области более-менее универсального syntax highlighting интересуют.
Желаемые критерии мне не сильно помогут найти какие-то обзоры / общие подходы, разве нет?
А ведь проблеме-то много лет, и практические решения явно существуют. ;)
Так Вам же эти практические решения уже предложили. Это как раз заурядные регулярные выражения и инкрементальные методы разбора.
источник

YS

Yaroslav Schekin in Compiler Development
Алексей Запольский
Так по ссылке на colorer есть pdf'ы там кратенько. Я посмотрел "Подсветка_синтаксиса" в википедии на разных языках - везде ссылки на разные ресурсы. На арабском - ссылка на блог Эвана Брукса. Так и не понятно, нужна подсветка только ключевых слов с разбивкой по категориям или синтаксический анализ с определением по правилам грамматик?
Читаю я их как раз. ;)
Но пока ещё не понял, откуда взялся язык Highlighting Resource Codes, и по каким принципам это работает.
источник

YS

Yaroslav Schekin in Compiler Development
Peter Sovietov
Так Вам же эти практические решения уже предложили. Это как раз заурядные регулярные выражения и инкрементальные методы разбора.
Эээ... что конкретно означает "заурядные регулярные выражения"?
Я могу так написать вообще почти про любой компилятор, смотрите: "gcc — это заурядные регулярные выражения" (ну, потому что они там где-то внутри используются, да). ;)
Я к тому, что на основании "регулярных" выражений как-то создаётся метод/подход к решению, и мне пока непонятно, есть ли общие / в чём они состоят. :(
источник

ИЧ

Илья Чистяков in Compiler Development
Yaroslav https://pypi.org/project/antlr-ast/ - этот подход не достаточно универсальный? можно для многих языков найти такой генератор
источник

IB

Ivan Boldyrev in Compiler Development
Yaroslav Schekin
Эээ... что конкретно означает "заурядные регулярные выражения"?
Я могу так написать вообще почти про любой компилятор, смотрите: "gcc — это заурядные регулярные выражения" (ну, потому что они там где-то внутри используются, да). ;)
Я к тому, что на основании "регулярных" выражений как-то создаётся метод/подход к решению, и мне пока непонятно, есть ли общие / в чём они состоят. :(
Для подсветки синтаксиса для большинства языков достаточно сделать лексический разбор, с чем прекрасно справляются регулярные выражения, в отличии от компиляции, где нужен  и синтаксический разбор, и много чего ещё.
источник

ИЧ

Илья Чистяков in Compiler Development
Илья Чистяков
Yaroslav https://pypi.org/project/antlr-ast/ - этот подход не достаточно универсальный? можно для многих языков найти такой генератор
источник

YS

Yaroslav Schekin in Compiler Development
Илья Чистяков
Yaroslav https://pypi.org/project/antlr-ast/ - этот подход не достаточно универсальный? можно для многих языков найти такой генератор
Я бы сказал — нет, не достаточно. Есть языки, которые не разбираются LL; и, опять же, я не совсем понимаю, что там с восстановлением после ошибок. И удобство создания и отладки спецификаций для конкретных языков — тоже вопрос.
источник

ИЧ

Илья Чистяков in Compiler Development
Yaroslav Schekin
Я бы сказал — нет, не достаточно. Есть языки, которые не разбираются LL; и, опять же, я не совсем понимаю, что там с восстановлением после ошибок. И удобство создания и отладки спецификаций для конкретных языков — тоже вопрос.
да, тут в чатике мелькало, что кресты невозможно разобрать, на то они и кресты)
источник

PS

Peter Sovietov in Compiler Development
Yaroslav Schekin
Эээ... что конкретно означает "заурядные регулярные выражения"?
Я могу так написать вообще почти про любой компилятор, смотрите: "gcc — это заурядные регулярные выражения" (ну, потому что они там где-то внутри используются, да). ;)
Я к тому, что на основании "регулярных" выражений как-то создаётся метод/подход к решению, и мне пока непонятно, есть ли общие / в чём они состоят. :(
Вам уже указали — регулярные выражения важны не сами по себе, а как выразительный инструмент для токенизации текста. Я бы предложил Вам сделать подсветку синтаксиса Вашего любимого ЯП с помощью собственного токенизатора. Что можно и чего нельзя сделать без добавления поддержки рекурсивных конструкций? Насколько сложно сделать инкрементальный лексический разбор?
источник

YS

Yaroslav Schekin in Compiler Development
Ivan Boldyrev
Для подсветки синтаксиса для большинства языков достаточно сделать лексический разбор, с чем прекрасно справляются регулярные выражения, в отличии от компиляции, где нужен  и синтаксический разбор, и много чего ещё.
Так это только "лексическая" подсветка получается (на практике — так себе).
И "настоящих" регулярок не хватает даже для этого, во многих случаях.
Но полный разбор и в самом деле не нужен.
источник
2020 March 26

IB

Ivan Boldyrev in Compiler Development
Yaroslav Schekin
Так это только "лексическая" подсветка получается (на практике — так себе).
И "настоящих" регулярок не хватает даже для этого, во многих случаях.
Но полный разбор и в самом деле не нужен.
Можно примеры?
источник

YS

Yaroslav Schekin in Compiler Development
Peter Sovietov
Вам уже указали — регулярные выражения важны не сами по себе, а как выразительный инструмент для токенизации текста. Я бы предложил Вам сделать подсветку синтаксиса Вашего любимого ЯП с помощью собственного токенизатора. Что можно и чего нельзя сделать без добавления поддержки рекурсивных конструкций? Насколько сложно сделать инкрементальный лексический разбор?
Для моего любимого языка честный "токенизатор" именно для подсветки практически бесполезен (но это Вы просто "попали" в неудачный пример). ;)
Опять-таки, мне интересны общие подходы... что толку зацикливаться на конкретных языках?
источник