计算引用和格式化源代码

我正在为我的 Lua 代码进行一些基本的格式化,比如在数学运算符的周围添加缺失的空格等。

现在我意识到,如果我在引号之间(即我不想修改代码中的字符串)进行这些格式化,这是一个非常糟糕的想法。

有什么最优雅的解决这个问题的方法。 我目前的想法如下:

  • 像我以前做的那样进行正则表达式,找到我想要编辑的位置,然后从字符串开头开始计算引号的数量。 如果引号数量为奇数,则我在引号内。
  • 对行进行预拆分,以内部和外部引号的部分格式化。

我错过了什么明显的东西吗? 更好的选择?

点赞
用户1008957
用户1008957

我会采取以下方法:

  1. 将代码中的所有字符串替换为一个编号的模式,例如 $1$$2$$3$等等。当然,你需要在一张表格中记录每个整数索引的原始字符串。
  2. 进行任何你想要的格式化(但一定要确保不修改模式)。
  3. $%n+$ 模式替换回原始字符串。
2013-01-12 19:54:47
用户172486
用户172486

你描述的通常称为“美化器”(pretty printer)。

由于 Lua 的语法非常简单,最可靠的方法是实现一个解析 Lua 语法的解析器,只需以标准样式输出解析后的代码即可。您可以将其混合到现有的解析器(lparser.c)中,也可以使用 lua-users 维基上的现有语法。该语法似乎是 LL(1),因此简单的递归下降解析器或 LPEG 都是不错的选择。

仅使用正则表达式几乎总是比使用真正的解析器更费力,因为越来越多的特殊情况和上下文信息(例如计数嵌套括号)会渗入正则表达式中。

2013-01-13 02:03:25