Как связать последовательность символов для подсчета как единое целое в шаблоне Lua?
Поэтому я пытаюсь разобрать #define
операторы из файла C с использованием шаблонов Lua, но в многострочных определениях есть случай, когда вы можете экранировать символ новой строки с обратной косой чертой.
Чтобы я знал, где заканчивается определение, мне нужно уметь определять backslash + linebreak
как если бы это был один символ, так что я могу получить дополнение этого, а затем использовать *
квантификатор на нем, а затем считать до первого не экранированного перевода строки.
Как я могу это сделать?
1 ответ
Решение
Вы не можете просто заменить все вхождения "\\\n"
с каким-то временным символом, потому что возникнет проблема с линией "c\\\\\n"
в следующем примере.
Вместо этого вы должны реализовать мини-сканер для исходных файлов C:
local str = [[
#define x y
#define a b\
c\\
d();
#define z
]]
-- Print all #defines found in the text
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