Pull to refresh

Comments 22

Пожалуйста, не надо так. AST люди придумали не потому, что им нечем было заняться, а потому что AST — это то, с чем de facto работает рантайм. Регулярками и простым заглядыванием вы никогда не добьетесь правильного результата. Вот то, что приходит в голову сразу; уверен, я смог бы придумывать еще и еще, если бы вся гибельность подхода не была и так очевидна.


42/*foo*/
// foo */ bar
во всех редакторах для подсветки используют ast?

Зачем вы задаете вопрос, на который я точно не смогу ответить, поскольку «все» редакторы в 2020 — почти несчетное множество?


В хороших редакторах для пригодных для этого языков — да.

В хороших редакторах для пригодных для этого языков

есть у меня notepad3 (он же notepad2). подсвечивает примерно 50 языков. по количеству языков понятно, что ast в нем и не пахнет.

хороший редактор. даже в голову не приходило подойти к разработчику и бросить «не надо так». это я к тому, что не нужно обобщать. подсветка кода не только в крютых ide нужна.

кстати, 42/*foo*/ она парсит нормально ;)
Прошу прощения, а как вы сделали вывод о способе реализации, исходя из числа языков?

И зачем вообще делать такого рода предположения о проекте с открытым исходным кодом? Там под капотом Scintilla (которая в основе того же SciTE) и обычные лексеры, никаких велосипедов.
я в курсе, что там scintilla. никакого упоминания об ast в обоих проектах нет.
Мда. Как бы это помягче, чтобы не нагрубить. Вы сравниваете тёплое с мягким. Почитайте что-ли что такое AST. Это не библиотека на которой строят редакторы.
И очень вероятно, что Scintilla парсит используя AST, я в код не смотрел.
я в код не смотрел.

а я смотрел. строки ast там нет.

На сем дескуссию я продолжать не буду, т.к. судя по ответу вы не знали что такое AST и после моей просьбы хотя бы примерно глянуть, о чем идёт речь не стали. Всего хорошего.

Кстати не вижу в ваших коментариях строки "алфавит". По всей видимости вы его не используете.

AST к подсветки не имеет ни какого отношения. Для правильной подсветке достаточна списка лексем.

Кажется, я придумал новый вид капчи — докажи, что тебе есть что написать, для этого выбери из двух вариантов, как правильно пишется "жи" и "ши" )

UFO just landed and posted this here
потому что AST — это то, с чем de facto работает рантайм
а в js нам каким боком Ваш рантайм упал?
И что не так с Вашим примером? Вроде в статье однострочные комментарии до конца строки считываются
Я никогда не делал подсветку синтаксиса, но, кажется, по крайней мере для языков с несложной грамматикой, можно обойтись без AST (по крайней мере в явном виде) и использовать парсер языка основанный на событиях + стек состояний. В принципе, это отдалённо похоже на то, что описано в статье.

В просто случае ваш подход может и сработать, но к примеру код C++ вообще нетривиально подсветить, потому что банально трудно парсить, даже VS иногда не справляется. И выход только один — честно генерировать AST на основе полного парсинга программы с сохранением объявленных классов, функций и enum'ов с помощью подручных инструментов, а вот потом уже делать подсветку на основе этого контекста

Для чего нужна подстветка?
Для IDE.
А там AST все равно необходим.
Например, для проверки кода на ошибки.

Вы статьи в интернетах предпочитаете читать без подсветки синтаксиса, стесняюсь спросить?


И это, далеко не все разработчики в мире пользуются IDE. Я, например, подсветку ошибок принудительно отключаю даже в текстовом редакторе, просто потому, что она мешает и отвлекает.

В демке на гитхабе неправильно парсит
var x=10/**/ /2;
UFO just landed and posted this here

Несколько лет назад писал подсветку для своего хобби-проекта. Хотя писалась она не на js и не для js, идеи отчасти схожи. Основные отличия:


  1. Вместо одной переменной состояния стек состояний.
  2. Вместо посимвольной обработки поиск по регексам.

На примерах из статьи и комментариев всё работает как надо, насколько могу судить. Правда, подсветка регекса работает только если перед ним пробел либо открывающаяся скобка (либо начало строки).



Да, тут одинаковый стиль текста выставлен для чисел и регексов.

Sign up to leave a comment.

Articles