summary refs log tree commit diff stats
path: root/test.lua
diff options
context:
space:
mode:
authorSoniEx2 <endermoneymod@gmail.com>2019-03-31 11:02:57 -0300
committerSoniEx2 <endermoneymod@gmail.com>2019-03-31 11:02:57 -0300
commitd03d77d28b812244be66763356f24659da769f05 (patch)
treecef5cff3fc7dcfc1f0794633d7c835c8938c3a6b /test.lua
Parser seems to work?
Diffstat (limited to 'test.lua')
-rw-r--r--test.lua58
1 files changed, 58 insertions, 0 deletions
diff --git a/test.lua b/test.lua
new file mode 100644
index 0000000..606d60e
--- /dev/null
+++ b/test.lua
@@ -0,0 +1,58 @@
+--[[
+    This file is part of parser.lua - table based parsing
+    Copyright (C) 2019  Soni L.
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU Affero General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU Affero General Public License for more details.
+
+    You should have received a copy of the GNU Affero General Public License
+    along with this program.  If not, see <https://www.gnu.org/licenses/>.
+--]]
+
+local parser = require "parser"
+
+do -- trim left spaces
+    local defs = {}
+    defs.self = defs
+    defs[' '] = "whitespace"
+    defs['\n'] = "whitespace"
+    defs['\r'] = "whitespace"
+    defs['\t'] = "whitespace"
+    defs['\f'] = "whitespace"
+    defs['\v'] = "whitespace"
+    defs.whitespace = "self"
+    defs[''] = function(state, token)
+        state[#state + 1] = token
+        if #state > 20 then
+            state[1] = table.concat(state)
+            for i=#state, 2, -1 do
+                state[i] = nil
+            end
+        end
+        return "start"
+    end
+    defs.start = {}
+    defs.start.self = defs.start
+    defs.start[''] = function(state, token)
+        state[#state + 1] = token
+        if #state > 20 then
+            state[1] = table.concat(state)
+            for i=#state, 2, -1 do
+                state[i] = nil
+            end
+        end
+        return "self"
+    end
+    for k,v in ipairs({"hello", "    hello", "\t \v \n\r hallo", "I really like this parser thingy if it can be called that"}) do
+        local state, err = parser.parse(defs, v)
+        if not state then print(err) end
+        print(table.concat(state))
+    end
+end