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

时间:2019-06-24 12:54:00

标签: peg pegjs

我想为自定义程序语言创建一个格式化程序/样式,并且正在阅读有关它的内容,但似乎我缺少了一些东西。

正在寻找/玩PEG.js,似乎可以完成工作。 Ive编写了一个小型解析器,并在运行时正确返回了语法树(AST

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

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

1 个答案:

答案 0 :(得分:1)

美化代码基本上只是将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