Используйте сгенерированный PEG.js парсер для украшения кода - PullRequest
0 голосов
/ 24 июня 2019

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

Искал / играл с PEG.js и, похоже, он будет работать,Я написал небольшой синтаксический анализатор, и при запуске - он правильно возвращает синтаксическое дерево (AST)

И главный вопрос теперь заключается в следующем: как использовать сгенерированный синтаксический анализатор для создания (например) VSCode /Atom / CodeMirror / и т.д..расширение (я), которое украсит / отформатирует код?

Это правильный подход в целом?(с использованием парсера или необходимо написать конкретные парсеры для каждого инструмента)

1 Ответ

1 голос
/ 23 июля 2019

Украшающий код - это, по сути, просто преобразование AST обратно в код, удаление оригинального пробела и его замена нужным форматированием.

Следующая грамматика преобразует список нечувствительных к регистру символов a в массив:

Expression = _ array:( a:"a"i _ {return a} )+ _ {return array}
_ = [ \t\n]*

Итак, с учетом этого ввода:

aa
aaaAa

a

Вы получите этот вывод:

[
   "a",
   "a",
   "a",
   "a",
   "a",
   "A",
   "a",
   "a"
]

Чтобы "украсить" этот список, вы просто преобразовали бы массив обратно в список, за исключением случаев с более регулярным интервалом:

result.join(" ");
// produces "a a a a a A a a", which is syntactically identical
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...