Warning: this is an htmlized version! The original is here, and the conversion rules are here.
```-- This file:
--   http://angg.twu.net/LUA/LpegRex2.lua.html
--   http://angg.twu.net/LUA/LpegRex2.lua
--           (find-angg "LUA/LpegRex2.lua")
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
--
-- Tests for lpegrex.
-- See: (find-es "lpeg" "lpegrex")
--      (find-lpegrexpage)
--      (find-lpegrextext)
--
-- (defun l () (interactive) (find-angg "LUA/LpegRex2.lua"))

-- See: (find-angg "LUA/Rect.lua" "Rect")
--      (find-angg "LUA/Rect.lua" "SynTree")

Ast = Class {
type = "Ast",
torect = function (o)
if type(o) == "number" then return Rect.from(o) end
if type(o) == "string" then return Rect.from(o) end
if type(o) == "table" then
local out = Ast.torect(o[#o]):syn1()
for i=#o-2,1,-2 do
local lowerleft = Ast.torect(o[i])
local left = lowerleft:syn1(o[i+1])
local left_ = left:pad0(1, left:width()+2, "_")
out = left_ .. out
end
return out
end
PP("rectfromast can't handle this", o)
end,
simplify = function (o)
if type(o) ~= "table" then return o end
if #o == 1 then return Ast.simplify(o[1]) end
return Ast(map(Ast.simplify, o))
end,
__tostring = function (o) return o:tostring(o) end,
__index = {
tostring = function (o)
return Ast.torect(o):tostring()
end,
},
}

--[==[
* (eepitch-lua52)
* (eepitch-kill)
* (eepitch-lua52)
dofile "LpegRex2.lua"
= Ast.torect(42)
= Ast.torect({42})
a =           {2, "+", {5, "*", 6}, "-", 4}
b = Ast.simplify(a)
= b
= b[2]
= b[3]

--]==]

__options = {}

t0 = function (str)
local gram,subj = str:match("^(.-)::%s*(.*)\$")
local patt = lpegrex.compile(gram, {__options = __options})
ast,errlabel,errpos = patt:match(subj)
end
t1 = function (str) t0(str); PP(ast) end
t2 = function (str)
t0(str)
asts = ast and Ast.simplify(ast)
print(asts)
end

--[==[
* (eepitch-lua52)
* (eepitch-kill)
* (eepitch-lua52)
dofile "LpegRex2.lua"

t2 [=[ top     <-- addexpr
norp    <-- num / "(" addexpr ")"
addexpr <== mulexpr ({"+"} mulexpr)*
mulexpr <== norp    ({"*"} norp)*
num     <== {%d+}
:: (1+2*3*4+5)*6+7*(8*9)
]=]

= asts[1]
= asts[2]
= asts[3]

PPPV(ast)
PPPV(asts)

--]==]

-- Local Variables:
-- coding:  utf-8-unix
-- End:
```