Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file: -- http://anggtwu.net/LUA/VisCapts1.lua.html -- http://anggtwu.net/LUA/VisCapts1.lua -- (find-angg "LUA/VisCapts1.lua") -- Author: Eduardo Ochs <eduardoochs@gmail.com> -- -- (defun e () (interactive) (find-angg "LUA/VisCapts1.lua")) -- (find-LATEX "2024visualizing-captures.tex") -- «.WPGramLine» (to "WPGramLine") -- «.WPGramLine-tests» (to "WPGramLine-tests") require "ELpeg1" -- (find-angg "LUA/ELpeg1.lua") require "MapAST2" -- (find-angg "LUA/MapAST2.lua") bigstr = [=[ <Stmt> -> <Id> = <Expr> ; <Stmt> -> \T{\{} \; <StmtList> \; \T{\}} <Stmt> -> \T{if} \; \T{(} \; <Expr> \; \T{)} \; <Stmt> <StmtList> -> <Stmt> <StmtList> -> <StmtList> <Stmt> <Expr> -> <Id> <Expr> -> <Num> <Expr> -> <Expr> \; <Optr> \; <Expr> <Id> -> \T{x} <Id> -> \T{y} <Num> -> \T{0} <Num> -> \T{1} <Num> -> \T{9} <Optr> -> \T{>} <Optr> -> \T{+} ]=] -- __ ______ ____ _ _ -- \ \ / / _ \ / ___|_ __ __ _ _ __ ___ | | (_)_ __ ___ -- \ \ /\ / /| |_) | | _| '__/ _` | '_ ` _ \| | | | '_ \ / _ \ -- \ V V / | __/| |_| | | | (_| | | | | | | |___| | | | | __/ -- \_/\_/ |_| \____|_| \__,_|_| |_| |_|_____|_|_| |_|\___| -- -- «WPGramLine» (to ".WPGramLine") WPGramLine = Class { type = "WPGramLine", from = function (line) local a,b = line:match("(.*)->(.*)") a,b = bitrim(a),bitrim(b) return WPGramLine {a,b} end, __tostring = function (wgl) return mytostring(wgl) end, __index = { L = function (wgl) return WPGram_parse(wgl[1]) end, R = function (wgl) return WPGram_parse(wgl[2]) end, LR = function (wgl) return mkast("GramLine", wgl:L(), wgl:R()) end, }, } gr,V,VA,VE,PE = Gram.new() VA["<>"] = P"<" * ((1-S"<>")^1):C() * P">" VA.Co = ((1-V["<>"])^1):C() VA["."] = (V["<>"] + V.Co)^1 WPGram_gr = gr WPGram_parse0 = WPGram_gr:compile(".") WPGram_parse = function (s) return WPGram_parse0:match(s) end fmts["GramLine"] = "<1> &\\to& <2> \\\\" -- «WPGramLine-tests» (to ".WPGramLine-tests") --[==[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "VisCapts1.lua" lines = splitlines(bigstr) for _,li in ipairs(lines) do local wgl = WPGramLine.from(li) print(wgl) end wgl = WPGramLine.from(lines[1]) = wgl = wgl:R() = wgl:LR() = wgl:LR():totex() = totex(wgl:LR()) o = wgl:R() = o = o:totex() = o:show {em=1} * (etv) --]==] -- __ ______ ____ -- \ \ / / _ \ / ___|_ __ __ _ _ __ ___ -- \ \ /\ / /| |_) | | _| '__/ _` | '_ ` _ \ -- \ V V / | __/| |_| | | | (_| | | | | | | -- \_/\_/ |_| \____|_| \__,_|_| |_| |_| -- -- «.WPGram» (to "WPGram") -- «WPGram» (to ".WPGram") WPGram = Class { type = "WPGram", __index = { }, } -- «.WPGram-tests» (to "WPGram-tests") -- «WPGram-tests» (to ".WPGram-tests") -- (find-angg "LUA/ParseTikz1.lua") -- (find-angg "LUA/MapAST2.lua" "totex") -- (c2m231introp 5 "gramatica-fig") -- (c2m231introa "gramatica-fig") --[[ * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) dofile "VisCapts1.lua" = gr:cm0("Ang", "<Foo>") lines = splitlines(bigstr) for _,li in ipairs(lines) do local wgl = WPGramLine.from(li) print(wgl) end for _,li in ipairs(lines) do local a,b = li:match("(.*)->(.*)") a,b = bitrim(a),bitrim(b) -- print(li) print(a,b) end --]] -- Local Variables: -- coding: utf-8-unix -- End: