From 173fd486fe60091289be9220e2b90209e99b46f3 Mon Sep 17 00:00:00 2001 From: Ruben Shekspir Date: Sat, 11 May 2019 21:51:55 +0400 Subject: [PATCH] Something works:D --- CharacterStack.Mod | 4 +-- DependencyResolver.Mod | 64 +++++++++++++++++++++------------------- JsonParser.Mod | 66 ++++++++++++++++++++++++------------------ PackageResolver.Mod | 4 +-- Settings.Mod | 2 +- http.Mod | 2 +- logger.Mod | 2 +- 7 files changed, 80 insertions(+), 64 deletions(-) diff --git a/CharacterStack.Mod b/CharacterStack.Mod index c0c171a..6fedef7 100644 --- a/CharacterStack.Mod +++ b/CharacterStack.Mod @@ -43,7 +43,7 @@ VAR BEGIN NEW(n); - IF self.Count = 0 THEN RETURN 0AX END; + IF self.Count = 0 THEN RETURN 0X END; n := self.Get(self, self.Count - 1); self.Delete(self, self.Count - 1); @@ -56,7 +56,7 @@ VAR BEGIN NEW(n); - IF self.Count = 0 THEN RETURN 0AX END; + IF self.Count = 0 THEN RETURN 0X END; n := self.Get(self, self.Count - 1); RETURN n.obj(TChar).char; diff --git a/DependencyResolver.Mod b/DependencyResolver.Mod index e8a1f5b..144dd0c 100644 --- a/DependencyResolver.Mod +++ b/DependencyResolver.Mod @@ -7,6 +7,7 @@ VAR moduleNames: ARRAY ArrayMaxNumber OF JsonParser.TString; moduleJson: ARRAY ArrayMaxNumber OF JsonParser.TString; moduleVersions: ARRAY ArrayMaxNumber OF JsonParser.TString; + j : LONGINT; PROCEDURE Resolve *(jsonString: ARRAY OF CHAR); @@ -20,7 +21,7 @@ BEGIN jsonRecord := JsonParser.Create(jsonString); keyFound := jsonRecord.GetTerminal(jsonRecord, "Package", packageName); - + IF keyFound THEN Logger.Log("Parsing package by name"); Logger.Log(packageName); @@ -28,40 +29,45 @@ BEGIN ELSE Logger.Log("Value for the Key is not found"); RETURN; END; dependencies := jsonRecord.GetNonTerminal(jsonRecord, "Dependencies"); - dependencies.GetTerminalKeys(dependencies, keys); - FOR i := 0 TO LEN(keys) - 1 DO - keyFound := dependencies.GetTerminal(dependencies, keys[i], version); - - IF ~keyFound THEN Logger.Log('ERROR while seatching key'); Logger.Log(keys[i]); END; - ASSERT(keyFound); + FOR i := 0 TO LEN(keys) - 1 DO (* TODO: rewrite this logic to work with key count *) + IF ~Strings.Match(keys[i], "") THEN + keyFound := dependencies.GetTerminal(dependencies, keys[i], version); + IF ~keyFound THEN Logger.Log('ERROR while seatching key'); Logger.Log(keys[i]); END; + ASSERT(keyFound); - PackageResolver.ResolveFile( - Settings.host, - Settings.port, - keys[i], - version, - Settings.packageFileName, - returnedJSON - ); - - keyFound := FALSE; - FOR k := 0 TO j - 1 DO - IF Strings.Match(moduleNames[k], keys[i]) THEN - keyFound := TRUE; + PackageResolver.ResolveFile( + Settings.host, + Settings.port, + keys[i], + version, + Settings.packageFileName, + returnedJSON + ); + + keyFound := FALSE; + IF j >= LEN(moduleNames) THEN + Logger.Log("Out of range in Resolve function in ..."); + END; + ASSERT(j < LEN(moduleNames)); + + FOR k := 0 TO j - 1 DO + IF Strings.Match(moduleNames[k], keys[i]) THEN + keyFound := TRUE; + END; + END; + + + IF ~keyFound THEN + COPY(keys[i], moduleNames[j]); + COPY(version, moduleVersions[j]); + COPY(returnedJSON, moduleJson[j]); + INC(j); + Resolve(returnedJSON); END; END; - - IF ~keyFound THEN - COPY(keys[i], moduleNames[j]); - COPY(version, moduleVersions[j]); - COPY(returnedJSON, moduleJson[j]); - INC(j); - Resolve(returnedJSON); - END; END; - END Resolve; END DependencyResolver. \ No newline at end of file diff --git a/JsonParser.Mod b/JsonParser.Mod index d802b12..7aaf1e0 100644 --- a/JsonParser.Mod +++ b/JsonParser.Mod @@ -2,7 +2,7 @@ MODULE JsonParser; IMPORT Logger, CharacterStack, Strings, Out, strutils; CONST ArrayMaxNumber = 30; - ArrayMaxNumberChar = 1000; + ArrayMaxNumberChar = 10000; (* Const *) symbolBracketStart = "{"; symbolBracketEnd = "}"; @@ -40,13 +40,19 @@ VAR BEGIN FOR i := 0 TO LEN(self.NonTerminalKeys) - 1 DO IF Strings.Match(key, self.NonTerminalKeys[i]) THEN RETURN self.NonTerminalValues[i] END; - Logger.Log(key); - Logger.Log(self.NonTerminalKeys[i]); END; RETURN NIL; END GetNonTerminal; +PROCEDURE Empty(VAR string: ARRAY OF CHAR); +VAR + i : LONGINT; +BEGIN + FOR i := 0 TO LEN(string) - 1 DO string[i] := 0X END; + COPY("", string); +END Empty; + PROCEDURE GetTerminal *(self: JsonTypePointer; key: ARRAY OF CHAR; VAR returnValue: ARRAY OF CHAR): BOOLEAN; VAR i: LONGINT; @@ -106,10 +112,10 @@ END GetNoneTerminalKeys; *) PROCEDURE PushDownString( - string: ARRAY OF CHAR; - startCharacter: CHAR; - endCharacter: CHAR; - i: LONGINT; + string: ARRAY OF CHAR; + startCharacter: CHAR; + endCharacter: CHAR; + i: LONGINT; VAR returnString: ARRAY OF CHAR): LONGINT; VAR characterStack: CharacterStack.CharacterStackType; @@ -118,6 +124,7 @@ BEGIN NEW(characterStack); j := i; characterStack := CharacterStack.Create(); + Empty(returnString); REPEAT IF (characterStack.Count > 1) & (string[j] = endCharacter) THEN REPEAT UNTIL characterStack.pop(characterStack) = startCharacter; @@ -125,12 +132,17 @@ BEGIN characterStack.push(characterStack, string[j]); INC(j); END; - UNTIL characterStack.top(characterStack) = 0AX; + UNTIL characterStack.Count = 0; (* do not trust top it btings OAX on EOL*) + + IF j >= LEN(returnString) THEN + Logger.Log('ERROR string out of range in JSON parser'); + END; + ASSERT(j < LEN(returnString)); FOR k := i TO j DO returnString[k - i] := string[k]; END; - + RETURN j; (* returning next symbol of quote *) END PushDownString; @@ -152,7 +164,7 @@ VAR self: JsonTypePointer; i, j, terminalIterator, noneTerminalIterator: LONGINT; characterStack: CharacterStack.CharacterStackType; - key, val, nonTerminalVal, string: ARRAY ArrayMaxNumber OF CHAR; + key, val, nonTerminalVal, string: ARRAY ArrayMaxNumberChar OF CHAR; symbol: CHAR; symbolStart: CHAR; quoteStart: BOOLEAN; @@ -171,21 +183,21 @@ BEGIN terminalIterator := 0; noneTerminalIterator := 0; - - COPY("", key); - COPY("", val); - COPY("", nonTerminalVal); + Empty(key); + Empty(val); + Empty(nonTerminalVal); + Empty(string); quoteStart := FALSE; REPEAT IF (text[i] = symbolBracketStart) & (i = 0) THEN INC(i); - Logger.Log("Starting Parse Json"); + (* Logger.Log("Starting Parse Json"); *) END; IF symbol = symbolBracketStart THEN - Logger.Log("End Parsing Json"); + (* Logger.Log("End Parsing Json"); *) END; symbol := text[i]; @@ -202,16 +214,17 @@ BEGIN COPY(string, key); END; - COPY("", string); + Empty(string); END; IF (Strings.Length(key) > 0) & (Strings.Length(val) > 0) THEN deQuote(key, self.TerminalKeys[terminalIterator]); deQuote(val, self.TerminalsValues[terminalIterator]); + INC(terminalIterator); - COPY("", key); - COPY("", val); + Empty(key); + Empty(val); END; (* none terminals *) @@ -221,27 +234,24 @@ BEGIN IF (Strings.Length(string) > 0) & (symbol = symbolBracketStart) THEN IF Strings.Length(key) > 0 THEN - COPY(string, nonTerminalVal) + COPY(string, nonTerminalVal); END; - COPY("", string); + Empty(string); END; - - IF (Strings.Length(key) > 0) & (Strings.Length(nonTerminalVal) > 0) THEN deQuote(key, self.NonTerminalKeys[noneTerminalIterator]); self.NonTerminalValues[noneTerminalIterator] := Create(nonTerminalVal); - + INC(noneTerminalIterator); - COPY("", key); - COPY("", nonTerminalVal); - RETURN self; + Empty(key); + Empty(nonTerminalVal); END; INC(i); - UNTIL i > LEN(text) - 1; + UNTIL (i >= LEN(text) - 1) OR (text[i] = 0X); RETURN self; END Create; diff --git a/PackageResolver.Mod b/PackageResolver.Mod index fe964a3..6f85015 100644 --- a/PackageResolver.Mod +++ b/PackageResolver.Mod @@ -1,5 +1,5 @@ MODULE PackageResolver; -IMPORT FileManager, http, Strings; +IMPORT FileManager, http, Strings, Logger; CONST ArrayMaxNumber = 10000; @@ -21,7 +21,7 @@ BEGIN Strings.Append(fileName, filePath); http.get(host, port, filePath, returnValue); - + http.getClean(returnValue, returnValue); (* TODO: introduce write to file functionality *) (* FileManager.CreateDirectory(packageName); *) (* FileManager.Write(packageName + fileName, returnValue); *) diff --git a/Settings.Mod b/Settings.Mod index 9d93e03..c277f16 100644 --- a/Settings.Mod +++ b/Settings.Mod @@ -2,5 +2,5 @@ MODULE Settings; CONST packageFileName* = "VersionFile.json"; host* = "localhost"; - port* = "8000"; + port* = "80"; END Settings. \ No newline at end of file diff --git a/http.Mod b/http.Mod index 28aeb05..06496b3 100644 --- a/http.Mod +++ b/http.Mod @@ -77,7 +77,7 @@ BEGIN (i > Strings.Length(buff)); END getHeader; -PROCEDURE get *(host, path, port: ARRAY OF CHAR; VAR buff: ARRAY OF CHAR); +PROCEDURE get *(host, port, path: ARRAY OF CHAR; VAR buff: ARRAY OF CHAR); VAR socket : Internet.Socket; connectionFlag: BOOLEAN; diff --git a/logger.Mod b/logger.Mod index 844044e..3966c0b 100644 --- a/logger.Mod +++ b/logger.Mod @@ -61,7 +61,7 @@ BEGIN Out.String("-"); LogNormalized(sec, 2); Out.String(" :- "); - FOR i:=0 TO Strings.Length(buff) DO + FOR i := 0 TO Strings.Length(buff) - 1 DO (* Out.Char(" "); Out.Int(ORD(buff[i]), 4); Out.Char("-"); *)