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"))

loadlpegrex() -- (find-angg "LUA/lua50init.lua" "loadlpegrex")

-- 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: