在 Lua 模式中对句子应用量词

所以我试图使用 Lua 模式从 C 文件中解析 #define 语句,但是有一种情况是多行定义,其中您可能使用反斜杠转义换行符。

为了让我知道定义的结束位置,我需要能够将 反斜杠 + 换行符 定义为一个单一的字符,这样我就可以得到其补集并在其上使用 * 量词,然后计算直到第一个未转义的换行符。

我该如何做到这一点?

点赞
用户1847592
用户1847592

你不能简单地将所有的"\\\n"出现替换为一些临时符号,因为在以下示例中出现的行"c\\\\\n"会导致问题。

相反,你应该为 C 源文件实现一个小扫描器:

local str = [[
#define x y
#define a b\
c\\
d();
#define z
]]

-- 打印在文本中找到的所有 #define
local line = ""
for char in str:gmatch"\\?." do
   if char == "\n" then
      if line:sub(1, #"#define") == "#define" then
         print(line)
      end
      line = ""
   else
      line = line..char
   end
end

输出:

#define x y
#define a b\
c\\
#define z
2016-06-20 10:23:58