diff options
| author | Bruce Hill <bitbucket@bruce-hill.com> | 2018-09-14 14:00:48 -0700 |
|---|---|---|
| committer | Bruce Hill <bitbucket@bruce-hill.com> | 2018-09-14 14:01:07 -0700 |
| commit | 7c1f2dfd69afe119322e19b3a4061876b3dd1033 (patch) | |
| tree | ee540007cdad2681b03a208c657811591da58cc9 /nomsu_compiler.lua | |
| parent | 4d48bf359df98512a2a741d48ea222d055b733c0 (diff) | |
Fixes and improvements, and ported nomsu.3.peg to new tidier syntax.
Diffstat (limited to 'nomsu_compiler.lua')
| -rw-r--r-- | nomsu_compiler.lua | 71 |
1 files changed, 36 insertions, 35 deletions
diff --git a/nomsu_compiler.lua b/nomsu_compiler.lua index 510de16..5578e0e 100644 --- a/nomsu_compiler.lua +++ b/nomsu_compiler.lua @@ -62,12 +62,45 @@ table.copy = function(t) return _tbl_0 end)(), getmetatable(t)) end +local make_tree +make_tree = function(tree, userdata) + local cls = AST[tree.type] + tree.source = Source(userdata.filename, tree.start, tree.stop) + tree.start, tree.stop = nil, nil + tree.type = nil + do + local _accum_0 = { } + local _len_0 = 1 + for _index_0 = 1, #tree do + local t = tree[_index_0] + if AST.is_syntax_tree(t, "Comment") then + _accum_0[_len_0] = t + _len_0 = _len_0 + 1 + end + end + tree.comments = _accum_0 + end + if #tree.comments == 0 then + tree.comments = nil + end + for i = #tree, 1, -1 do + if AST.is_syntax_tree(tree[i], "Comment") then + table.remove(tree, i) + end + end + tree = setmetatable(tree, cls) + cls.source_code_for_tree[tree] = userdata.source + if tree.__init then + tree:__init() + end + return tree +end local Parsers = { } local max_parser_version = 0 for version = 1, 999 do local _continue_0 = false repeat - if not (version == 4) then + if not (version == 4 or version == 3) then _continue_0 = true break end @@ -84,40 +117,8 @@ for version = 1, 999 do break end max_parser_version = version - local make_tree - make_tree = function(tree, userdata) - local cls = AST[tree.type] - tree.source = Source(userdata.filename, tree.start, tree.stop) - tree.start, tree.stop = nil, nil - tree.type = nil - do - local _accum_0 = { } - local _len_0 = 1 - for _index_0 = 1, #tree do - local t = tree[_index_0] - if AST.is_syntax_tree(t, "Comment") then - _accum_0[_len_0] = t - _len_0 = _len_0 + 1 - end - end - tree.comments = _accum_0 - end - if #tree.comments == 0 then - tree.comments = nil - end - for i = #tree, 1, -1 do - if AST.is_syntax_tree(tree[i], "Comment") then - table.remove(tree, i) - end - end - tree = setmetatable(tree, cls) - cls.source_code_for_tree[tree] = userdata.source - if tree.__init then - tree:__init() - end - return tree - end - Parsers[version] = make_parser(peg_file:read("*a"), make_tree) + local peg_contents = peg_file:read("*a") + Parsers[version] = make_parser(peg_contents, make_tree) peg_file:close() _continue_0 = true until true |
