Size: a a a

Compiler Development

2020 March 26

YS

Yaroslav Schekin in Compiler Development
Илья Чистяков
всё равно нужно полное описание языка в виде грамматике
Зачем? "Ужасные костыли" вон справляются и без этого. ;)
Кстати, для некоторых языков "полное описание языка в виде грамматики" бесполезно, потому что почти ничего, что действительно интересно для highlighting, на этом уровне в них нет.
источник

ИЧ

Илья Чистяков in Compiler Development
Yaroslav Schekin
Зачем? "Ужасные костыли" вон справляются и без этого. ;)
Кстати, для некоторых языков "полное описание языка в виде грамматики" бесполезно, потому что почти ничего, что действительно интересно для highlighting, на этом уровне в них нет.
ужасные костыли справляются, но они по определению не универсальны

про бесполезность не понятно, можете развернуть ответ?
источник

IB

Ivan Boldyrev in Compiler Development
Yaroslav Schekin
И что? Интерпретаторы/компиляторы языков с формально контекстно-зависимыми грамматиками как-то с ними справляются, а задача подсветки — намного проще, по идее. ;)
В общем случае эти задачи эквивалентны.  Задача становится лёгкой, когда язык можно факторизовать на лексическую и грамматическую составляющие.

Кстати, а вы не задумывались, зачем эти странные люди комиляторщики вообще сделали лексеры? Ведь всё вообще можно описать одной грамматикой, зачем нужны какие-то лексеры-шмексеры, под ногами только путаются...

Подумайте на досуге, а я умываю руки.
источник

YS

Yaroslav Schekin in Compiler Development
Илья Чистяков
ужасные костыли справляются, но они по определению не универсальны

про бесполезность не понятно, можете развернуть ответ?
Они, как раз — "универсальны".
Меня интересует, откуда авторы всё это взяли — такое ощущение, что некоторые похожи друг на друга. Возможно, неспроста?
источник

YS

Yaroslav Schekin in Compiler Development
Ivan Boldyrev
В общем случае эти задачи эквивалентны.  Задача становится лёгкой, когда язык можно факторизовать на лексическую и грамматическую составляющие.

Кстати, а вы не задумывались, зачем эти странные люди комиляторщики вообще сделали лексеры? Ведь всё вообще можно описать одной грамматикой, зачем нужны какие-то лексеры-шмексеры, под ногами только путаются...

Подумайте на досуге, а я умываю руки.
> В общем случае эти задачи эквивалентны
Сразу "нет", извините. Примеры я уже выше приводил, и сейчас будут ещё. ;)

> Кстати, а вы не задумывались, зачем эти странные люди комиляторщики вообще сделали лексеры?
Зачем — написано в каждом учебнике, я некоторые читал, да.
источник

IB

Ivan Boldyrev in Compiler Development
Yaroslav Schekin
> В общем случае эти задачи эквивалентны
Сразу "нет", извините. Примеры я уже выше приводил, и сейчас будут ещё. ;)

> Кстати, а вы не задумывались, зачем эти странные люди комиляторщики вообще сделали лексеры?
Зачем — написано в каждом учебнике, я некоторые читал, да.
Как вы легко теорему существования опровергнули контрпримером :D

Ну хорошо, хоть читать умеете, значит, не безнадёжны.
источник

YS

Yaroslav Schekin in Compiler Development
Илья Чистяков
ужасные костыли справляются, но они по определению не универсальны

про бесполезность не понятно, можете развернуть ответ?
> про бесполезность не понятно, можете развернуть ответ?
К примеру, если мне кто-то даст "подсветку синтаксиса" для Tcl, которая следует его лексике / грамматике — я сразу выкину её в окно — она бесполезна на практике, т.к. формального синтаксиса в языке почти нет. ;)
источник

ИЧ

Илья Чистяков in Compiler Development
Yaroslav Schekin
> про бесполезность не понятно, можете развернуть ответ?
К примеру, если мне кто-то даст "подсветку синтаксиса" для Tcl, которая следует его лексике / грамматике — я сразу выкину её в окно — она бесполезна на практике, т.к. формального синтаксиса в языке почти нет. ;)
не очень понимаю проблему, если речь про то, что некоторые языки позволяют создавать DSL и это уже не подсветить, то как вообще эту задачу можно решить? только авто этого DSL знает как его нужно подсвечивать
источник

YS

Yaroslav Schekin in Compiler Development
Илья Чистяков
не очень понимаю проблему, если речь про то, что некоторые языки позволяют создавать DSL и это уже не подсветить, то как вообще эту задачу можно решить? только авто этого DSL знает как его нужно подсвечивать
А программиста-практика почему всё это должно это интересовать, а? ;)
Посмотрите вот на это, к примеру.
Всё, что тут _синтаксически_ есть — это комментарий, первое слово команды (proc), и её три аргумента — просто строки.
источник

ИЧ

Илья Чистяков in Compiler Development
непонятно
источник

YS

Yaroslav Schekin in Compiler Development
Илья Чистяков
непонятно
Эээ... что именно?
источник

ИЧ

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

YS

Yaroslav Schekin in Compiler Development
Илья Чистяков
последние два ответа, и моё предположение про DSL не помогло, а только всё ухудшило
Что именно Вам в них непонятно, я имею в виду?
Вот "честная", чисто синтаксическая подсветка того же фрагмента.
источник

ИЧ

Илья Чистяков in Compiler Development
а, теперь понял
источник

ИЧ

Илья Чистяков in Compiler Development
это слабость регексп, потому нужен лексер
источник

e

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

Почти всё здесь — незарезервированные ключевые слова. Если посдвечивать только на уровне токенов, получается... понятно что.
E-Control может в вложенные сущности, а что требуется сделать с SQL мне не ясно — поясни.
источник

YS

Yaroslav Schekin in Compiler Development
Илья Чистяков
это слабость регексп, потому нужен лексер
Нет, Вы вообще не поняли, мне кажется.
"Честная" подсветка — это именно то, как ЯП (Tcl) читает этот фрагмент (lexer+parser), она полностью соответствует синтаксису языка.
Только вот человек читает это так: https://t.me/CompilerDev/61015
Т.е. для именно для подсветки в данном случае lexer и parser самого языка практически бесполезны.
источник

YS

Yaroslav Schekin in Compiler Development
e
E-Control может в вложенные сущности, а что требуется сделать с SQL мне не ясно — поясни.
SELECT /* это statement */ RECURSIVE /* а это -- идентификатор, а не вовсе не ключевое слово! */
 FROM BEGIN RECURSIVE /* keyword id id */
 JOIN COMMIT ALTER /* keyword id id */
   ON AFTER > ABORT /* keyword id operator id  */

А "тупой" лексический разбор тут выдаст кучу ключевых слов, и всё.
источник

ИЧ

Илья Чистяков in Compiler Development
Yaroslav Schekin
Нет, Вы вообще не поняли, мне кажется.
"Честная" подсветка — это именно то, как ЯП (Tcl) читает этот фрагмент (lexer+parser), она полностью соответствует синтаксису языка.
Только вот человек читает это так: https://t.me/CompilerDev/61015
Т.е. для именно для подсветки в данном случае lexer и parser самого языка практически бесполезны.
мне кажется строки не надо подсвечивать так, а там где надо, обычно другой язык, типа json или yaml, и тут нужно уже указывать программисту как он хочет подсветить текст, потому что многие языки пересекаются по синтаксису
источник

YS

Yaroslav Schekin in Compiler Development
Илья Чистяков
мне кажется строки не надо подсвечивать так, а там где надо, обычно другой язык, типа json или yaml, и тут нужно уже указывать программисту как он хочет подсветить текст, потому что многие языки пересекаются по синтаксису
"я сразу выкину её в окно — она бесполезна на практике". ;)
источник