Нужна помощь, чтобы понять LPeg и PEGs
Следующий шаблон (с этой страницы) сопоставляет только строки со сбалансированными скобками:
b = lpeg.P{ "(" * ((1 - lpeg.S"()") + lpeg.V(1))^0 * ")" }
Что значит 1-
в 1 - lpeg.S"()"
имею в виду?
function gsub (s, patt, repl)
patt = lpeg.P(patt)
patt = lpeg.Cs((patt / repl + 1)^0)
return lpeg.match(patt, s)
end
Что это +1
в patt / repl + 1
имею в виду?
И я до сих пор не совсем понимаю функцию приоритетного выбора оператора /
очень хорошо из этой статьи
Любая помощь будет оценена!
1 ответ
Решение
1
в 1 - lpeg.S"()"
означает любой персонаж. Весь оператор может быть прочитан как, соответствовать любому символу, но не соответствует символу в наборе "()"
,
+1
та же идея, если repl
тогда строка patt / repl + 1
соответствует шаблону patt
а затем заменяет его захват строкой repl
или пропускает символ.