-- $Id: grammar1.lua,v 1.7 2008/08/22 10:11:19 hahe Exp $ require "lpeg" txt = "( (123) (1(abc) 23))" ob = lpeg.P("(") cb = lpeg.P(")") pat = lpeg.P{ "braced", braced = ob * lpeg.V("inside") * cb, inside = (lpeg.V("innermost") + lpeg.V("braced") + (1 - (ob + cb)))^0, innermost = ob * lpeg.C((1 - (ob + cb))^0) * cb, } pat = pat * lpeg.P(-1) pat = lpeg.Ct(pat) x = lpeg.match(pat, txt) for k, v in pairs(x) do print(k, v) end