mirror of
https://github.com/vishapoberon/vipak.git
synced 2026-04-06 04:52:26 +00:00
fixed issue with push down
This commit is contained in:
parent
959cb3bb9b
commit
7ec56af371
1 changed files with 24 additions and 18 deletions
|
|
@ -1,7 +1,7 @@
|
||||||
MODULE HashMap;
|
MODULE HashMap;
|
||||||
IMPORT Logger, CharacterStack, Strings, Out;
|
IMPORT Logger, CharacterStack, Strings, Out;
|
||||||
CONST
|
CONST
|
||||||
ArrayMaxNumber = 5000;
|
ArrayMaxNumber = 100;
|
||||||
(* Const *)
|
(* Const *)
|
||||||
symbolBracketStart = "{";
|
symbolBracketStart = "{";
|
||||||
symbolBracketEnd = "}";
|
symbolBracketEnd = "}";
|
||||||
|
|
@ -30,7 +30,6 @@ VAR
|
||||||
jsonRecord: JsonTypePointer;
|
jsonRecord: JsonTypePointer;
|
||||||
testValue: ARRAY ArrayMaxNumber OF CHAR;
|
testValue: ARRAY ArrayMaxNumber OF CHAR;
|
||||||
keyFound: BOOLEAN;
|
keyFound: BOOLEAN;
|
||||||
|
|
||||||
PROCEDURE GetTerminal *(self: JsonTypePointer; key: ARRAY OF CHAR; VAR returnValue: ARRAY OF CHAR): BOOLEAN;
|
PROCEDURE GetTerminal *(self: JsonTypePointer; key: ARRAY OF CHAR; VAR returnValue: ARRAY OF CHAR): BOOLEAN;
|
||||||
VAR
|
VAR
|
||||||
i: LONGINT;
|
i: LONGINT;
|
||||||
|
|
@ -41,6 +40,12 @@ BEGIN
|
||||||
RETURN FALSE;
|
RETURN FALSE;
|
||||||
END GetTerminal;
|
END GetTerminal;
|
||||||
|
|
||||||
|
(*
|
||||||
|
TODO:
|
||||||
|
Create a good validation for comas
|
||||||
|
Create a good validation for name repetition
|
||||||
|
*)
|
||||||
|
|
||||||
PROCEDURE PushDownString(
|
PROCEDURE PushDownString(
|
||||||
string: ARRAY OF CHAR;
|
string: ARRAY OF CHAR;
|
||||||
startCharacter: CHAR;
|
startCharacter: CHAR;
|
||||||
|
|
@ -54,23 +59,20 @@ BEGIN
|
||||||
NEW(characterStack);
|
NEW(characterStack);
|
||||||
j := i;
|
j := i;
|
||||||
characterStack := CharacterStack.Create();
|
characterStack := CharacterStack.Create();
|
||||||
|
|
||||||
REPEAT
|
REPEAT
|
||||||
characterStack.push(characterStack, string[j]);
|
IF (characterStack.Count > 1) & (string[j] = endCharacter) THEN
|
||||||
|
REPEAT UNTIL characterStack.pop(characterStack) = startCharacter;
|
||||||
IF characterStack.top(characterStack) = endCharacter THEN
|
ELSE
|
||||||
REPEAT
|
characterStack.push(characterStack, string[j]);
|
||||||
UNTIL characterStack.pop(characterStack) = startCharacter;
|
INC(j);
|
||||||
END;
|
END;
|
||||||
|
|
||||||
INC(j);
|
|
||||||
UNTIL characterStack.top(characterStack) = 0AX;
|
UNTIL characterStack.top(characterStack) = 0AX;
|
||||||
|
|
||||||
FOR k := i TO j DO
|
FOR k := i TO j DO
|
||||||
returnString[k - i] := string[k];
|
returnString[k - i] := string[k];
|
||||||
END;
|
END;
|
||||||
|
|
||||||
RETURN j;
|
RETURN j; (* returning next symbol of quote *)
|
||||||
END PushDownString;
|
END PushDownString;
|
||||||
|
|
||||||
PROCEDURE Create*(text: ARRAY OF CHAR): JsonTypePointer;
|
PROCEDURE Create*(text: ARRAY OF CHAR): JsonTypePointer;
|
||||||
|
|
@ -98,8 +100,8 @@ BEGIN
|
||||||
quoteStart := FALSE;
|
quoteStart := FALSE;
|
||||||
|
|
||||||
REPEAT
|
REPEAT
|
||||||
symbol := text[i];
|
IF (text[i] = symbolBracketStart) & (i = 0) THEN
|
||||||
IF symbol = symbolBracketStart THEN
|
INC(i);
|
||||||
Logger.Log("Starting Parse Json");
|
Logger.Log("Starting Parse Json");
|
||||||
END;
|
END;
|
||||||
|
|
||||||
|
|
@ -107,6 +109,8 @@ BEGIN
|
||||||
Logger.Log("End Parsing Json");
|
Logger.Log("End Parsing Json");
|
||||||
END;
|
END;
|
||||||
|
|
||||||
|
symbol := text[i];
|
||||||
|
|
||||||
(* terminals *)
|
(* terminals *)
|
||||||
IF symbol = quote THEN
|
IF symbol = quote THEN
|
||||||
i := PushDownString(text, quote, quote, i, string);
|
i := PushDownString(text, quote, quote, i, string);
|
||||||
|
|
@ -126,13 +130,14 @@ BEGIN
|
||||||
COPY(key, self.TerminalKeys[terminalIterator]);
|
COPY(key, self.TerminalKeys[terminalIterator]);
|
||||||
COPY(val, self.TerminalsValues[terminalIterator]);
|
COPY(val, self.TerminalsValues[terminalIterator]);
|
||||||
INC(terminalIterator);
|
INC(terminalIterator);
|
||||||
|
|
||||||
COPY("", key);
|
COPY("", key);
|
||||||
COPY("", val);
|
COPY("", val);
|
||||||
END;
|
END;
|
||||||
|
|
||||||
(* none terminals *)
|
(* none terminals *)
|
||||||
IF symbol = symbolBracketStart THEN
|
IF symbol = symbolBracketStart THEN
|
||||||
i := PushDownString(string, symbolBracketStart, symbolBracketEnd, i, string);
|
i := PushDownString(text, symbolBracketStart, symbolBracketEnd, i, string);
|
||||||
END;
|
END;
|
||||||
|
|
||||||
IF (Strings.Length(string) > 0) & (symbol = symbolBracketStart) THEN
|
IF (Strings.Length(string) > 0) & (symbol = symbolBracketStart) THEN
|
||||||
|
|
@ -164,8 +169,9 @@ END Create;
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
NEW(jsonRecord);
|
NEW(jsonRecord);
|
||||||
jsonRecord := Create("{'foo': 'bar', 'test': 'test1'}");
|
jsonRecord := Create("{'foo': 'bar', 'test': 'test1', 'test2': {'asdasd': 'asd'}}");
|
||||||
keyFound := jsonRecord.GetTerminal(jsonRecord, "test", testValue);
|
|
||||||
|
keyFound := jsonRecord.GetTerminal(jsonRecord, "'test'", testValue);
|
||||||
|
|
||||||
IF keyFound THEN
|
IF keyFound THEN
|
||||||
Logger.Log('found KEY');
|
Logger.Log('found KEY');
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue