Something works:D

This commit is contained in:
Ruben Shekspir 2019-05-11 21:51:55 +04:00
parent 1f1763abff
commit 173fd486fe
7 changed files with 80 additions and 64 deletions

View file

@ -43,7 +43,7 @@ VAR
BEGIN BEGIN
NEW(n); 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); n := self.Get(self, self.Count - 1);
self.Delete(self, self.Count - 1); self.Delete(self, self.Count - 1);
@ -56,7 +56,7 @@ VAR
BEGIN BEGIN
NEW(n); 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); n := self.Get(self, self.Count - 1);
RETURN n.obj(TChar).char; RETURN n.obj(TChar).char;

View file

@ -7,6 +7,7 @@ VAR
moduleNames: ARRAY ArrayMaxNumber OF JsonParser.TString; moduleNames: ARRAY ArrayMaxNumber OF JsonParser.TString;
moduleJson: ARRAY ArrayMaxNumber OF JsonParser.TString; moduleJson: ARRAY ArrayMaxNumber OF JsonParser.TString;
moduleVersions: ARRAY ArrayMaxNumber OF JsonParser.TString; moduleVersions: ARRAY ArrayMaxNumber OF JsonParser.TString;
j : LONGINT; j : LONGINT;
PROCEDURE Resolve *(jsonString: ARRAY OF CHAR); PROCEDURE Resolve *(jsonString: ARRAY OF CHAR);
@ -28,12 +29,11 @@ BEGIN
ELSE Logger.Log("Value for the Key is not found"); RETURN; END; ELSE Logger.Log("Value for the Key is not found"); RETURN; END;
dependencies := jsonRecord.GetNonTerminal(jsonRecord, "Dependencies"); dependencies := jsonRecord.GetNonTerminal(jsonRecord, "Dependencies");
dependencies.GetTerminalKeys(dependencies, keys); dependencies.GetTerminalKeys(dependencies, keys);
FOR i := 0 TO LEN(keys) - 1 DO 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); keyFound := dependencies.GetTerminal(dependencies, keys[i], version);
IF ~keyFound THEN Logger.Log('ERROR while seatching key'); Logger.Log(keys[i]); END; IF ~keyFound THEN Logger.Log('ERROR while seatching key'); Logger.Log(keys[i]); END;
ASSERT(keyFound); ASSERT(keyFound);
@ -47,12 +47,18 @@ BEGIN
); );
keyFound := FALSE; 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 FOR k := 0 TO j - 1 DO
IF Strings.Match(moduleNames[k], keys[i]) THEN IF Strings.Match(moduleNames[k], keys[i]) THEN
keyFound := TRUE; keyFound := TRUE;
END; END;
END; END;
IF ~keyFound THEN IF ~keyFound THEN
COPY(keys[i], moduleNames[j]); COPY(keys[i], moduleNames[j]);
COPY(version, moduleVersions[j]); COPY(version, moduleVersions[j]);
@ -61,7 +67,7 @@ BEGIN
Resolve(returnedJSON); Resolve(returnedJSON);
END; END;
END; END;
END;
END Resolve; END Resolve;
END DependencyResolver. END DependencyResolver.

View file

@ -2,7 +2,7 @@ MODULE JsonParser;
IMPORT Logger, CharacterStack, Strings, Out, strutils; IMPORT Logger, CharacterStack, Strings, Out, strutils;
CONST CONST
ArrayMaxNumber = 30; ArrayMaxNumber = 30;
ArrayMaxNumberChar = 1000; ArrayMaxNumberChar = 10000;
(* Const *) (* Const *)
symbolBracketStart = "{"; symbolBracketStart = "{";
symbolBracketEnd = "}"; symbolBracketEnd = "}";
@ -40,13 +40,19 @@ VAR
BEGIN BEGIN
FOR i := 0 TO LEN(self.NonTerminalKeys) - 1 DO FOR i := 0 TO LEN(self.NonTerminalKeys) - 1 DO
IF Strings.Match(key, self.NonTerminalKeys[i]) THEN RETURN self.NonTerminalValues[i] END; IF Strings.Match(key, self.NonTerminalKeys[i]) THEN RETURN self.NonTerminalValues[i] END;
Logger.Log(key);
Logger.Log(self.NonTerminalKeys[i]);
END; END;
RETURN NIL; RETURN NIL;
END GetNonTerminal; 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; PROCEDURE GetTerminal *(self: JsonTypePointer; key: ARRAY OF CHAR; VAR returnValue: ARRAY OF CHAR): BOOLEAN;
VAR VAR
i: LONGINT; i: LONGINT;
@ -118,6 +124,7 @@ BEGIN
NEW(characterStack); NEW(characterStack);
j := i; j := i;
characterStack := CharacterStack.Create(); characterStack := CharacterStack.Create();
Empty(returnString);
REPEAT REPEAT
IF (characterStack.Count > 1) & (string[j] = endCharacter) THEN IF (characterStack.Count > 1) & (string[j] = endCharacter) THEN
REPEAT UNTIL characterStack.pop(characterStack) = startCharacter; REPEAT UNTIL characterStack.pop(characterStack) = startCharacter;
@ -125,7 +132,12 @@ BEGIN
characterStack.push(characterStack, string[j]); characterStack.push(characterStack, string[j]);
INC(j); INC(j);
END; 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 FOR k := i TO j DO
returnString[k - i] := string[k]; returnString[k - i] := string[k];
@ -152,7 +164,7 @@ VAR
self: JsonTypePointer; self: JsonTypePointer;
i, j, terminalIterator, noneTerminalIterator: LONGINT; i, j, terminalIterator, noneTerminalIterator: LONGINT;
characterStack: CharacterStack.CharacterStackType; characterStack: CharacterStack.CharacterStackType;
key, val, nonTerminalVal, string: ARRAY ArrayMaxNumber OF CHAR; key, val, nonTerminalVal, string: ARRAY ArrayMaxNumberChar OF CHAR;
symbol: CHAR; symbol: CHAR;
symbolStart: CHAR; symbolStart: CHAR;
quoteStart: BOOLEAN; quoteStart: BOOLEAN;
@ -171,21 +183,21 @@ BEGIN
terminalIterator := 0; terminalIterator := 0;
noneTerminalIterator := 0; noneTerminalIterator := 0;
Empty(key);
COPY("", key); Empty(val);
COPY("", val); Empty(nonTerminalVal);
COPY("", nonTerminalVal); Empty(string);
quoteStart := FALSE; quoteStart := FALSE;
REPEAT REPEAT
IF (text[i] = symbolBracketStart) & (i = 0) THEN IF (text[i] = symbolBracketStart) & (i = 0) THEN
INC(i); INC(i);
Logger.Log("Starting Parse Json"); (* Logger.Log("Starting Parse Json"); *)
END; END;
IF symbol = symbolBracketStart THEN IF symbol = symbolBracketStart THEN
Logger.Log("End Parsing Json"); (* Logger.Log("End Parsing Json"); *)
END; END;
symbol := text[i]; symbol := text[i];
@ -202,16 +214,17 @@ BEGIN
COPY(string, key); COPY(string, key);
END; END;
COPY("", string); Empty(string);
END; END;
IF (Strings.Length(key) > 0) & (Strings.Length(val) > 0) THEN IF (Strings.Length(key) > 0) & (Strings.Length(val) > 0) THEN
deQuote(key, self.TerminalKeys[terminalIterator]); deQuote(key, self.TerminalKeys[terminalIterator]);
deQuote(val, self.TerminalsValues[terminalIterator]); deQuote(val, self.TerminalsValues[terminalIterator]);
INC(terminalIterator); INC(terminalIterator);
COPY("", key); Empty(key);
COPY("", val); Empty(val);
END; END;
(* none terminals *) (* none terminals *)
@ -221,27 +234,24 @@ BEGIN
IF (Strings.Length(string) > 0) & (symbol = symbolBracketStart) THEN IF (Strings.Length(string) > 0) & (symbol = symbolBracketStart) THEN
IF Strings.Length(key) > 0 THEN IF Strings.Length(key) > 0 THEN
COPY(string, nonTerminalVal) COPY(string, nonTerminalVal);
END; END;
COPY("", string); Empty(string);
END; END;
IF (Strings.Length(key) > 0) & (Strings.Length(nonTerminalVal) > 0) THEN IF (Strings.Length(key) > 0) & (Strings.Length(nonTerminalVal) > 0) THEN
deQuote(key, self.NonTerminalKeys[noneTerminalIterator]); deQuote(key, self.NonTerminalKeys[noneTerminalIterator]);
self.NonTerminalValues[noneTerminalIterator] := Create(nonTerminalVal); self.NonTerminalValues[noneTerminalIterator] := Create(nonTerminalVal);
INC(noneTerminalIterator); INC(noneTerminalIterator);
COPY("", key); Empty(key);
COPY("", nonTerminalVal); Empty(nonTerminalVal);
RETURN self;
END; END;
INC(i); INC(i);
UNTIL i > LEN(text) - 1; UNTIL (i >= LEN(text) - 1) OR (text[i] = 0X);
RETURN self; RETURN self;
END Create; END Create;

View file

@ -1,5 +1,5 @@
MODULE PackageResolver; MODULE PackageResolver;
IMPORT FileManager, http, Strings; IMPORT FileManager, http, Strings, Logger;
CONST ArrayMaxNumber = 10000; CONST ArrayMaxNumber = 10000;
@ -21,7 +21,7 @@ BEGIN
Strings.Append(fileName, filePath); Strings.Append(fileName, filePath);
http.get(host, port, filePath, returnValue); http.get(host, port, filePath, returnValue);
http.getClean(returnValue, returnValue);
(* TODO: introduce write to file functionality *) (* TODO: introduce write to file functionality *)
(* FileManager.CreateDirectory(packageName); *) (* FileManager.CreateDirectory(packageName); *)
(* FileManager.Write(packageName + fileName, returnValue); *) (* FileManager.Write(packageName + fileName, returnValue); *)

View file

@ -2,5 +2,5 @@ MODULE Settings;
CONST CONST
packageFileName* = "VersionFile.json"; packageFileName* = "VersionFile.json";
host* = "localhost"; host* = "localhost";
port* = "8000"; port* = "80";
END Settings. END Settings.

View file

@ -77,7 +77,7 @@ BEGIN
(i > Strings.Length(buff)); (i > Strings.Length(buff));
END getHeader; 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 VAR
socket : Internet.Socket; socket : Internet.Socket;
connectionFlag: BOOLEAN; connectionFlag: BOOLEAN;

View file

@ -61,7 +61,7 @@ BEGIN
Out.String("-"); Out.String("-");
LogNormalized(sec, 2); LogNormalized(sec, 2);
Out.String(" :- "); Out.String(" :- ");
FOR i:=0 TO Strings.Length(buff) DO FOR i := 0 TO Strings.Length(buff) - 1 DO
(* Out.Char(" "); (* Out.Char(" ");
Out.Int(ORD(buff[i]), 4); Out.Int(ORD(buff[i]), 4);
Out.Char("-"); *) Out.Char("-"); *)