Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
-- (laq 28)

* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
require "re"
-- (laq 24)
mem     = {}
numberp = function (addr) return    0<=addr and addr<= 999 end
stringp = function (addr) return 1000<=addr and addr<=2999 end
symbolp = function (addr) return 3000<=addr and addr<=4999 end
consp   = function (addr) return 5000<=addr and addr<=9996 end
nilp    = function (addr) return                addr==9999 end
taup    = function (addr) return                addr==9998 end
Lp      = function (addr) return                addr==9997 end
stringws = {}
symbolws = {}

-- An "addr" is a string like "123", "$1234", "s4567", "c5678";
-- a "word" is a number between 0 and 9999.
--
atow = function (addr)    return addr:match("%d%d%d%d")+0 end
wtoa = function (w, char) return (char or "")..format("%04d", w) end

tostr0 = function (w)
    if numberp(w) then return w.."" end
    if nilp(w)    then return "nil" end
    if taup(w)    then return "tau" end
    if Lp(w)      then return "L" end
  end
tostr1 = function (w)
    if tostr0(w) then return tostr0(w) end
    if stringp(w) then return wtoa(w, "$") end
    if symbolp(w) then return wtoa(w, "@") end
    if consp(w)   then return wtoa(w, "&") end
  end
tostr2 = function (w)
    if tostr0(w) then return tostr0(w) end
    if stringp(w) then return format("%q", mem[w]) end
    if symbolp(w) then return mem[w][1] end
  end


symbolws["nil"] = 9999
symbolws["tau"] = 9998
symbolws["L"]   = 9997
firstfree = function (w)
    for i=w,9999 do if mem[w]==nil then return w end end
  end
newstring0 = function (str)
    local w = firstfree(1000)
    mem[w] = str
    stringws[str] = w
    return w
  end
newsymbol0 = function (str)
    local w = firstfree(3000)
    mem[w] = {str, 9999}
    symbolws[str] = w
    return w
  end
newstring = function (str) return stringws[str] or newstring0(str) end
newsymbol = function (str) return symbolws[str] or newsymbol0(str) end


























-- Addr   = re.compile([[ [$@&]? { [0-9]+ } -> f ]], {f=tonumber})
-- String = re.compile([[ '"' { [^"]* } '"' -> f ]], {f=PP})
-- Symbol = re.compile([[ { [-!#$%&*+,/-~]+ } -> f ]], {f=PP})
Atom = re.compile([[
  ( [$@&]? { [0-9]+ }   -> tonumber ) /
  ( '"' { [^"]* } '"'   -> tostring ) /
  ( { [-!#$%&*+,/-~]+ } -> tosymbol )
  ]], {tonumber=tonumber, tostring=newstring, tosymbol=newsymbol})

PP(Atom:match "123")
PP(Atom:match "$123")
PP(Atom:match '"abcd"')

= Addr:match "$1234 foo"
= Symbol:match "+33/~"

(find-einsert '((32 127)))

 

0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~



 !#$%%&*+,%-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~


parser = re.compile([[
  add <- ( num ( { '+' } num ) * ) -> print
  num <- {%d+}
]], {


read1 = function (str, pos)
    
  end





ntoca = function (n)
    return ntoa(n, (number
  end


addrtos0 = function (addr)
    if numberp(addr) then return ""..addr end
    if stringp(addr) then return format("%q", mem(addr)) end
    if symbolp(addr) then return format("%q", mem(addr)[1]) end
    if taup(addr)    then return "tau" end
    if Lp(addr)      then return "L"   end
  end


= aton("&5463")
= ntoa(99)
= ntoa(99, "@")