我想为自定义程序语言创建一个格式化程序/linter,并且正在阅读它,但似乎我错过了一些东西。
正在看/玩,PEG.js
似乎它会完成工作。我写了一个小解析器,运行时 - 它正确返回语法树(AST
)
而现在的主要问题是:如何使用生成的解析器来创建(例如)一个///VSCode
等。将美化/格式化代码的扩展名?Atom
CodeMirror
一般来说,这是正确的方法吗?(使用解析器或需要为每个工具编写特定的解析器)
美化代码基本上只是将 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