From a7d912a33ae1f6857e5abbda1997bcf1fff2a83d Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Tue, 18 Dec 2018 19:30:01 -0800 Subject: Initial pass on updating syntax. --- parser.lua | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) (limited to 'parser.lua') diff --git a/parser.lua b/parser.lua index 5eee8ca..8cb96ea 100644 --- a/parser.lua +++ b/parser.lua @@ -3,6 +3,19 @@ local re = require('re') lpeg.setmaxstack(20000) local P, R, S, C, Cmt, Carg, Cc P, R, S, C, Cmt, Carg, Cc = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Cmt, lpeg.Carg, lpeg.Cc +local foldr +foldr = function(...) + local inner = select(1, ...) + for i = 2, select('#', ...) do + assert(inner.type) + local outer = select(i, ...) + table.insert(outer, 1, inner) + inner.start = outer.start + inner = outer + end + assert(inner.type) + return inner +end local DEFS do local _with_0 = { } @@ -17,6 +30,7 @@ do _with_0.Tree = function(t, userdata) return userdata.make_tree(t, userdata) end + _with_0.foldr = foldr DEFS = _with_0 end setmetatable(DEFS, { @@ -40,16 +54,14 @@ setmetatable(DEFS, { end end }) -local peg_tidier = re.compile([[file <- %nl* {~ (def/comment) (%nl+ (def/comment))* %nl* ~} -def <- anon_def / captured_def -anon_def <- - ({ident} (" "*) ":" {[^%nl]* (%nl+ " "+ [^%nl]*)*}) - -> "%1 <- %2" -captured_def <- - ({ident} (" "*) "(" {ident} ")" (" "*) ":" {[^%nl]* (%nl+ " "+ [^%nl]*)*}) - -> "%1 <- ({| {:start:{}:} %3 {:stop:{}:} {:type: (''->'%2') :} |} %%userdata) -> Tree" -ident <- [a-zA-Z_][a-zA-Z0-9_]* -comment <- "--" [^%nl]* +local peg_tidier = re.compile([[ file <- %nl* {~ (captured_def/line) (%nl+ (captured_def/line))* %nl* ~} + ident <- [a-zA-Z_][a-zA-Z0-9_]* + line <- [^%nl]* + captured_def <- + ({ident} (" "*) "(" {ident} ")" (" "*) "<-" {[^%nl]* (%nl+ " "+ [^%nl]*)*}) -> +"%1 <- ({| {:type:''->'%2':} {:start:{}:} + %3 + {:stop:{}:} |} %%userdata) -> Tree" ]]) local make_parser make_parser = function(peg, make_tree) -- cgit v1.2.3