aboutsummaryrefslogtreecommitdiff
path: root/parser.lua
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2018-12-18 19:30:01 -0800
committerBruce Hill <bruce@bruce-hill.com>2018-12-18 19:30:12 -0800
commita7d912a33ae1f6857e5abbda1997bcf1fff2a83d (patch)
treeaecc913dfa7c148d35805c356d944c593237089f /parser.lua
parent8e52f1901b73f2072d21f8c79ef52bf137180161 (diff)
Initial pass on updating syntax.
Diffstat (limited to 'parser.lua')
-rw-r--r--parser.lua32
1 files changed, 22 insertions, 10 deletions
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)