Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file: -- http://anggtwu.net/LUA/Ast5.lua.html -- http://anggtwu.net/LUA/Ast5.lua -- (find-angg "LUA/Ast5.lua") -- Author: Eduardo Ochs <eduardoochs@gmail.com> -- -- (defun a3 () (interactive) (find-angg "LUA/Ast3.lua")) -- (defun a4 () (interactive) (find-angg "LUA/Ast4.lua")) -- (code-etv "~/LATEX/") -- (find-code-etv "~/LATEX/") -- -- Superseded by: -- (defun el () (interactive) (find-angg "LUA/ELpeg-lambda1.lua")) require "Ast3" -- (find-angg "LUA/Ast3.lua") -- (find-angg "LUA/Show1.lua") totex00 = ToText0 {fmts={}} -- Override this! totex0 = function (o) return totex00:with(o) end totex = function (o) return totex00:with(o):totext() end AST.__index.totex0 = function (o) return totex0(o) end AST.__index.totex = function (o) return totex(o) end -- (find-angg "LUA/Show1.lua" "string.show-tests") AST.__index.show = function (o, ops) return totex(o):show(ops) end AST.alttags = { eq="=", plus="+", minus="-", Mul="*", div="/", Div="//", pow="^", paren="()", plic="'" } gr,V,VA,VE,PE = Gram.new() grcm = function (...) print(gr:cm(...)) end _ = S(" ")^0 bin = function (a, op, b) return AST {[0]=op, a, b} end foldlambda = function (A) local f = function (var, o) return bin(var, "L", o) end return foldr1(f, A) end VA.num = Cs(R"09"^1) VA.var = anyof "a b c x y f g" VA.paren = "("*_* V.expr *_*")" V.oplambda = P"L"*_* V.var *_*P"."*_ V.exprbasic = V.var + V.num + V.paren V.exprap = assocl(V.exprbasic, Cc"ap") V.exprmul = assocl(V.exprap, Cs"*" ) V.exprplus = assocl(V.exprmul, Cs"+" ) V.exprlambda = (V.oplambda^0 * V.exprplus):Ct() / foldlambda V.expr = V.exprlambda Show.preamble = [[ \def\und#1#2{\underbrace{#1}_{#2}} \def\u #1{\underbrace{#1}_{}} ]] totex00 = ToText0 { fmts = { ["()"] = "(<1>)", ["//"] = "\\frac{<1>}{<2>}", ["*"] = "<1> \\cdot <2>", ["*"] = "\\u{<1> \\cdot <2>}", ["+"] = "<1> + <2>", ["+"] = "\\u{<1> + <2>}", ["="] = "<1> = <2>", ap = "<1>\\,<2>", ap = "\\u{<1>\\,<2>}", mul = "<1> <2>", Mul = "<1> \\cdot <2>", L = "\\lambda <1>.\\,<2>", L = "\\u{\\lambda\\u{<1>}.\\,<2>}", L = "\\u{\\lambda <1>.\\,<2>}", num = "\\u{<1>}", num = "<1>", var = "<1>", }, } --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "Ast5.lua" = grcm ("expr", "(L a. 10*a) ((L b. b+4)(3))") o = gr:cm0("expr", "(L a. 10*a) ((L b. b+4)(3))") = o = o:totex() = o:totex0() = o:show("dd 1") * (etv) --]] -- Local Variables: -- coding: utf-8-unix -- End: