使用 PEG.js 生成的解析器美化代码

Use PEG.js generated parser to beautify code

我想为自定义程序语言创建一个 formatter/linter 并且正在阅读它,但似乎我遗漏了一些东西。

是 looking/playing 和 PEG.js,似乎它会完成工作。我写了一个小解析器,当 运行 - 它正确 returns 语法树 (AST)

现在的主要问题是:如何使用生成的解析器创建(例如)VSCode/Atom/CodeMirror/等。 beautify/format 代码的扩展名?

一般来说这是正确的方法吗? (使用解析器或需要为每个工具编写特定的解析器)

美化代码基本上就是把AST转回代码,丢掉原来的白色space,换成想要的格式

以下语法将 case-insensitive a 个字符的列表转换为数组:

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

所以给定这个输入:

aa
aaaAa

a

你得到这个输出:

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

要"beautify"这个列表,您只需将数组转换回列表,但间距更规则:

result.join(" ");
// produces "a a a a a A a a", which is syntactically identical