【问题标题】:Use PEG.js generated parser to beautify code使用 PEG.js 生成的解析器美化代码
【发布时间】:2019-06-24 12:54:00
【问题描述】:

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

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

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

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

【问题讨论】:

  • 为了美化代码,您需要使用语法树并将其转换回格式良好的代码。不过,它是否是最好的工具,或者如何在特定的代码编辑器中做到这一点,对于 Stack Overflow 来说是一个过于宽泛的问题。

标签: peg pegjs


【解决方案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

【讨论】:

    猜你喜欢
    • 2016-03-03
    • 1970-01-01
    • 2023-04-05
    • 2011-10-23
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    相关资源
    最近更新 更多