0

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

正在看/玩,PEG.js似乎它会完成工作。我写了一个小解析器,运行时 - 它正确返回语法树(AST

而现在的主要问题是:如何使用生成的解析器来创建(例如)一个///VSCode等。将美化/格式化代码的扩展名?AtomCodeMirror

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

4

1 回答 1

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
于 2019-07-23T15:11:27.033 回答