From 5c43d9f64d1f55399f51797834179ebae57c0bad Mon Sep 17 00:00:00 2001 From: Todd Allen Date: Tue, 2 Jul 2019 08:59:41 -0400 Subject: [PATCH 1/3] Can now parse data not in a data structure --- JSONParser.class.nut | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/JSONParser.class.nut b/JSONParser.class.nut index 0eb9f11..0b11a19 100644 --- a/JSONParser.class.nut +++ b/JSONParser.class.nut @@ -253,7 +253,8 @@ class JSONParser { // current tokenizeing position local start = 0; - + local lastToken = null; + try { local @@ -262,7 +263,8 @@ class JSONParser { tokenizer = _JSONTokenizer(); while (token = tokenizer.nextToken(str, start)) { - + lastToken = token; + if ("ptfn" == token.type) { // punctuation/true/false/null action[token.value][state](); @@ -284,13 +286,18 @@ class JSONParser { } // check is the final state is not ok - // or if there is somethign left in the str + // or if there is something left in the str if (state != "ok" || regexp("[^\\s]").capture(str, start)) { local min = @(a, b) a < b ? a : b; local near = str.slice(start, min(str.len(), start + 10)); throw "JSON Syntax Error near `" + near + "`"; } + // if this is a standalone string or number, convert it + if (lastToken.type == "string" || lastToken.type == "number") { + return this._convert(lastToken.value, lastToken.type, converter, null) + } + return value; } From 2c150edabc42833152f4fbf942ed4671cec1de81 Mon Sep 17 00:00:00 2001 From: Todd Allen Date: Tue, 2 Jul 2019 09:27:11 -0400 Subject: [PATCH 2/3] Update JSONParser.class.nut --- JSONParser.class.nut | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/JSONParser.class.nut b/JSONParser.class.nut index 0b11a19..2150480 100644 --- a/JSONParser.class.nut +++ b/JSONParser.class.nut @@ -246,25 +246,20 @@ class JSONParser { } }; - // - state = "go"; stack = []; // current tokenizeing position local start = 0; - local lastToken = null; - - try { - - local + local result, token, + lastToken, tokenizer = _JSONTokenizer(); - + + try { while (token = tokenizer.nextToken(str, start)) { lastToken = token; - if ("ptfn" == token.type) { // punctuation/true/false/null action[token.value][state](); @@ -280,7 +275,6 @@ class JSONParser { start += token.length; } - } catch (e) { state = e; } @@ -295,7 +289,7 @@ class JSONParser { // if this is a standalone string or number, convert it if (lastToken.type == "string" || lastToken.type == "number") { - return this._convert(lastToken.value, lastToken.type, converter, null) + return this._convert(lastToken.value, lastToken.type, converter) } return value; @@ -374,7 +368,6 @@ class _JSONTokenizer { * @return {{type,value,length}|null} */ function nextToken(str, start = 0) { - local m, type, From e7ebe290994d3c7ae3557f368a5a20941e0c5282 Mon Sep 17 00:00:00 2001 From: Todd Allen Date: Tue, 2 Jul 2019 09:50:16 -0400 Subject: [PATCH 3/3] Update arguments --- JSONParser.class.nut | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/JSONParser.class.nut b/JSONParser.class.nut index 2150480..e1c3a8c 100644 --- a/JSONParser.class.nut +++ b/JSONParser.class.nut @@ -246,20 +246,25 @@ class JSONParser { } }; + // + state = "go"; stack = []; // current tokenizeing position local start = 0; - local + local lastToken = null; + + try { + + local result, token, - lastToken, tokenizer = _JSONTokenizer(); - - try { + while (token = tokenizer.nextToken(str, start)) { lastToken = token; + if ("ptfn" == token.type) { // punctuation/true/false/null action[token.value][state](); @@ -275,6 +280,7 @@ class JSONParser { start += token.length; } + } catch (e) { state = e; } @@ -368,6 +374,7 @@ class _JSONTokenizer { * @return {{type,value,length}|null} */ function nextToken(str, start = 0) { + local m, type,