0

我正在为我的 Lua 代码做一些基本的格式化。就像在数学操作数周围添加缺失的空格等。

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

解决这个问题的最优雅的方法是什么。到目前为止我的想法:

  • 像我到目前为止所做的那样做一个正则表达式来找到我想要编辑的地方,然后从字符串的开头计算引号到这个地方。如果有奇数个引号,我在一个带引号的字符串中。
  • 将行预拆分为引号内和引号外的部分,并且仅格式化外部部分。

我错过了一些明显的东西吗?更好的选择?

4

2 回答 2

2

您所描述的通常被称为“漂亮的打印机”。

由于 Lua 的语法非常简单,因此最稳健的方法是为 Lua 语法实现一个解析器,它只以标准样式发出已解析的代码。您可以将其破解到现有的解析器 (lparser.c) 中,或使用lua-users wiki 上的现有语法之一。语法似乎是 LL(1),因此简单的递归下降解析器或 LPEG 将是不错的选择。

尝试仅使用正则表达式执行此操作几乎总是会导致比仅使用真正的解析器更多的工作,因为越来越多的特殊情况和上下文信息(例如,计算嵌套括号)潜入正则表达式。

于 2013-01-13T02:03:25.050 回答
0

我将采取的方法如下:

  1. 将代码中的所有字符串替换为编号模式,例如$1$, $2$...$3$您当然会将每个整数索引的原始字符串保存在表格中。
  2. 制作您想要的任何格式(但请确保不要修改模式)。
  3. $%n+$用原始字符串替换后面的模式。
于 2013-01-12T19:54:47.753 回答