我想为自定义程序语言创建一个格式化程序/样式,并且正在阅读有关它的内容,但似乎我缺少了一些东西。
正在寻找/玩PEG.js
,似乎可以完成工作。 Ive编写了一个小型解析器,并在运行时正确返回了语法树(AST
)
现在的主要问题是:如何使用生成的解析器创建(例如)VSCode
/ Atom
/ CodeMirror
/ etc。美化/格式化代码的扩展名?
这通常是正确的方法吗? (使用解析器或需要为每个工具编写特定的解析器)
答案 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