使用 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
我想为自定义程序语言创建一个 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