diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2018-12-18 19:30:01 -0800 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2018-12-18 19:30:12 -0800 |
| commit | a7d912a33ae1f6857e5abbda1997bcf1fff2a83d (patch) | |
| tree | aecc913dfa7c148d35805c356d944c593237089f /parser.lua | |
| parent | 8e52f1901b73f2072d21f8c79ef52bf137180161 (diff) | |
Initial pass on updating syntax.
Diffstat (limited to 'parser.lua')
| -rw-r--r-- | parser.lua | 32 |
1 files changed, 22 insertions, 10 deletions
@@ -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) |
