Нужна помощь, чтобы понять 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 или пропускает символ.

Другие вопросы по тегам