Size: a a a

Compiler Development

2020 March 26

YS

Yaroslav Schekin in Compiler Development
Ivan Boldyrev
Можно примеры?
Примеры чего именно (я не понял, про что именно вопрос, извините)?
источник

А

Алексей ayaye :) in Compiler Development
Ivan Boldyrev
Можно примеры?
документационные комментарии в java?
источник

ИЧ

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

IB

Ivan Boldyrev in Compiler Development
Yaroslav Schekin
Примеры чего именно (я не понял, про что именно вопрос, извините)?
Пример, где "лексическая" подсветка "так себе", и пример, где регекспов не хватает для лексического разбора языка (что-нибудь не совсем маргинальное).
источник

YS

Yaroslav Schekin in Compiler Development
Илья Чистяков
а есть синтаксический анализатор, который может описать любой язык? или доказательство его возможности/невозможности?
Есть практические решения, которые, видимо, работают более-менее приемлемо. Меня просто интересует, на чём всё это основано?
источник

PS

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

ИЧ

Илья Чистяков in Compiler Development
Yaroslav Schekin
Есть практические решения, которые, видимо, работают более-менее приемлемо. Меня просто интересует, на чём всё это основано?
скорее есть частные решения, которые работают отлично, а общего решения нет, и это лежит в области доказательства теорем, как мне кажется
источник

ИЧ

Илья Чистяков in Compiler Development
можно начать с того, что регекспы не могут разобрать всё, а например питон может, и дальше упрощать синтаксис)
источник

YS

Yaroslav Schekin in Compiler Development
Ivan Boldyrev
Пример, где "лексическая" подсветка "так себе", и пример, где регекспов не хватает для лексического разбора языка (что-нибудь не совсем маргинальное).
Да хоть вложенные комментарии в стиле /* /* */ */.
Или вот это (SQL):
SELECT RECURSIVE
 FROM BEGIN RECURSIVE
 JOIN COMMIT ALTER
   ON AFTER > ABORT

Почти всё здесь — незарезервированные ключевые слова. Если посдвечивать только на уровне токенов, получается... понятно что.
источник

YS

Yaroslav Schekin in Compiler Development
Илья Чистяков
скорее есть частные решения, которые работают отлично, а общего решения нет, и это лежит в области доказательства теорем, как мне кажется
Неужели каждый, перед кем встаёт эта задача, начинает "с чистого листа"? :(
источник

ИЧ

Илья Чистяков in Compiler Development
Yaroslav Schekin
Неужели каждый, перед кем встаёт эта задача, начинает "с чистого листа"? :(
https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7 можно зайти на эту страничку, изучить все типы анализаторов, посмотреть на их слабые стороны, то что они не могут распарсить, и с помощью фантазии, придумать свой супер-анализатор!
источник

YS

Yaroslav Schekin in Compiler Development
Илья Чистяков
https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7 можно зайти на эту страничку, изучить все типы анализаторов, посмотреть на их слабые стороны, то что они не могут распарсить, и с помощью фантазии, придумать свой супер-анализатор!
Я не думаю, что это имеет непосредственное отношение к моему вопросу — не хочется изобретать свой "супер-велосипед". ;)
источник

IB

Ivan Boldyrev in Compiler Development
Yaroslav Schekin
Да хоть вложенные комментарии в стиле /* /* */ */.
Или вот это (SQL):
SELECT RECURSIVE
 FROM BEGIN RECURSIVE
 JOIN COMMIT ALTER
   ON AFTER > ABORT

Почти всё здесь — незарезервированные ключевые слова. Если посдвечивать только на уровне токенов, получается... понятно что.
Да, спасибо.  А много есть языков, где есть вложенные комментарии?
SQL — это соответствует какому-то стандарту? В тех диалектах, с которыми мне довелось работать, такие имена полей и таблиц приходилось как-то эскейпить.  Классический пример того, что вы привели (когда зарезервированные слова могут быть и идентификаторами) — PL/I, других примеров я доселе не видел (ну да, Perl с некоторой натяжкой).
источник

K

Kakadu in Compiler Development
Я видел предложения добоваления в LSP то ли семантической подстветки, то ли отступов. Думаю, что хорошее решение должно выглядять как-то так.
А то, что я видел с регулярками (плагины к vscode) — это костыли жуткие, так как регулярки с мощностью как у контекстно-зависимых грамматик превращаются в переизобретенную фазу сокращенного парсинга
источник

ИЧ

Илья Чистяков in Compiler Development
Yaroslav Schekin
Я не думаю, что это имеет непосредственное отношение к моему вопросу — не хочется изобретать свой "супер-велосипед". ;)
хм, мне вот чётко видится, что задача состоит в том, чтоб обобщить LL, LR в нечто потрясающее, как теория всего
источник

YS

Yaroslav Schekin in Compiler Development
Ivan Boldyrev
Да, спасибо.  А много есть языков, где есть вложенные комментарии?
SQL — это соответствует какому-то стандарту? В тех диалектах, с которыми мне довелось работать, такие имена полей и таблиц приходилось как-то эскейпить.  Классический пример того, что вы привели (когда зарезервированные слова могут быть и идентификаторами) — PL/I, других примеров я доселе не видел (ну да, Perl с некоторой натяжкой).
> А много есть языков, где есть вложенные комментарии?
Не знаю, если честно. Но если подход такое "не может" — на роль "универсального" он не подойдёт.

> SQL — это соответствует какому-то стандарту?
ISO SQL... более-менее. ;)
источник

IB

Ivan Boldyrev in Compiler Development
Yaroslav Schekin
> А много есть языков, где есть вложенные комментарии?
Не знаю, если честно. Но если подход такое "не может" — на роль "универсального" он не подойдёт.

> SQL — это соответствует какому-то стандарту?
ISO SQL... более-менее. ;)
Тогда машину Тьюринга в руки и вперёд :)
источник

YS

Yaroslav Schekin in Compiler Development
Kakadu
Я видел предложения добоваления в LSP то ли семантической подстветки, то ли отступов. Думаю, что хорошее решение должно выглядять как-то так.
А то, что я видел с регулярками (плагины к vscode) — это костыли жуткие, так как регулярки с мощностью как у контекстно-зависимых грамматик превращаются в переизобретенную фазу сокращенного парсинга
> Думаю, что хорошее решение должно выглядять как-то так.
Как-то как? LSP — это просто обёртка, как это делать-то? ;)

> костыли жуткие, так как регулярки с мощностью как у контекстно-зависимых грамматик
Да, вот такое и попадается — и всё время разное, что печально. :(
источник

YS

Yaroslav Schekin in Compiler Development
Ivan Boldyrev
Тогда машину Тьюринга в руки и вперёд :)
Ну уж нет! ;)
Неплохо бы DSL такой мощности на эту тему найти — это да.
источник

K

Kakadu in Compiler Development
Yaroslav Schekin
> Думаю, что хорошее решение должно выглядять как-то так.
Как-то как? LSP — это просто обёртка, как это делать-то? ;)

> костыли жуткие, так как регулярки с мощностью как у контекстно-зависимых грамматик
Да, вот такое и попадается — и всё время разное, что печально. :(
Как специальный вид парсера. Думаю, что можно накрутить полиморфизм в action коде: в одном случае делать AST, а во втором выдавать отрезки с тегами содержимого
источник