Private
Public Access
Implemented single line if statements
This commit is contained in:
1 parent
555de0b62b
commit
affc6d6e53
3 files changed
+59
-31
No files matched your search
@@ -1,4 +1,5 @@
|
||||
using Advanced_Software_Engineering.Verbs.Value;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Advanced_Software_Engineering.Verbs.Flow {
|
||||
public class IfChunk : VerbChunk, IVerb {
|
||||
@@ -9,6 +10,10 @@ namespace Advanced_Software_Engineering.Verbs.Flow {
|
||||
this.conditional = conditional;
|
||||
}
|
||||
|
||||
public IfChunk(IValue conditional, IVerb oneLineVerb) : base(new List<IVerb> { oneLineVerb }) {
|
||||
this.conditional = conditional;
|
||||
}
|
||||
|
||||
public new void ExecuteVerb() {
|
||||
if (conditional.ToBool()) base.ExecuteVerb();
|
||||
}
|
||||
|
||||
+27
-26
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using Advanced_Software_Engineering.Verbs.Value.ValueTypes;
|
||||
using System;
|
||||
using System.Drawing;
|
||||
|
||||
namespace Advanced_Software_Engineering.Verbs.Value {
|
||||
@@ -122,8 +123,23 @@ namespace Advanced_Software_Engineering.Verbs.Value {
|
||||
|
||||
public static IValue ConvertToIValue(string text, ValueStorage storage = null) {
|
||||
text = HelperFunctions.Strip(text);
|
||||
string value = text;
|
||||
//seperate assignment characters from everything else TODO FIX
|
||||
foreach (string op in new string[] { "=", "+", "-", "*", "/", "<", ">", "!" }) {
|
||||
value = value.Replace(op, " " + op + " ");
|
||||
}
|
||||
|
||||
value = HelperFunctions.Strip(value);
|
||||
if (value[0] == "="[0]) {
|
||||
value = value.Substring(1);
|
||||
}
|
||||
// now will definitly look like this:
|
||||
// 10 + i or i
|
||||
|
||||
string[] assignmentStrings = HelperFunctions.StripStringArray(value.Split(" "[0])).ToArray();
|
||||
|
||||
//No assignmnet
|
||||
if (!text.Contains("=")) {
|
||||
|
||||
if (!text.Contains("#")) {
|
||||
//Check if string is a number
|
||||
if (!text.Contains(".")) {
|
||||
@@ -147,21 +163,6 @@ namespace Advanced_Software_Engineering.Verbs.Value {
|
||||
//check for expression
|
||||
if (storage != null) {
|
||||
try {
|
||||
string value = text;
|
||||
//seperate assignment characters from everything else
|
||||
foreach (string op in new string[] { "=", "+", "-", "*", "/" }) {
|
||||
value = value.Replace(op, " " + op + " ");
|
||||
}
|
||||
|
||||
value = HelperFunctions.Strip(value);
|
||||
if (value[0] == "="[0]) {
|
||||
value = value.Substring(1);
|
||||
}
|
||||
// now will definitly look like this:
|
||||
// 10 + i or i
|
||||
|
||||
string[] assignmentStrings = HelperFunctions.StripStringArray(value.Split(" "[0])).ToArray();
|
||||
|
||||
// assignmentStrings will look something like this:
|
||||
// ["i"] or ["10", "+", "i"]
|
||||
if (assignmentStrings.Length == 1) return ValueFactory.CreateValue(storage, assignmentStrings[0]);
|
||||
@@ -180,19 +181,19 @@ namespace Advanced_Software_Engineering.Verbs.Value {
|
||||
return ValueFactory.CreateValue(text, "color");
|
||||
} catch (Exception) { }
|
||||
}
|
||||
} else {
|
||||
//Check if string is a bool
|
||||
|
||||
//Check if expression
|
||||
if (storage != null) {
|
||||
string value = text;
|
||||
value = HelperFunctions.Strip(value);
|
||||
if (value[0] == "="[0]) {
|
||||
value = value.Substring(1);
|
||||
}
|
||||
return ConvertToIValue(value, storage);
|
||||
// Check if string is a comparison
|
||||
// assignmentStrings will look something like this:
|
||||
// ["i"] or ["10", "=", "i"]
|
||||
if (assignmentStrings.Length == 3) {
|
||||
IValue value1 = ValueFactory.CreateValue(storage, assignmentStrings[0]);
|
||||
string op = assignmentStrings[1];
|
||||
IValue value2 = ValueFactory.CreateValue(storage, assignmentStrings[2]);
|
||||
return new ComparisonValue(value1, value2, op);
|
||||
}
|
||||
}
|
||||
|
||||
throw new Exception("Could not convert " + text + " to any type");
|
||||
}
|
||||
|
||||
|
||||
@@ -46,7 +46,8 @@ namespace Advanced_Software_Engineering {
|
||||
string[] commandParameters = result.getParameters();
|
||||
if (command == null) throw new Exception("There is no command to process");
|
||||
|
||||
IVerb tmpVerb;
|
||||
IVerb tmpVerb = null;
|
||||
bool parsed = false;
|
||||
|
||||
//check for names in directory
|
||||
if (rootValueStorage.CheckVariableExists(command)) {
|
||||
@@ -59,7 +60,7 @@ namespace Advanced_Software_Engineering {
|
||||
}
|
||||
|
||||
//process declarations
|
||||
if (!(commandParameters == null))
|
||||
if (!(commandParameters == null) && !parsed) {
|
||||
switch (command) {
|
||||
case "var":
|
||||
if (commandParameters.Length == 1) {
|
||||
@@ -81,15 +82,35 @@ namespace Advanced_Software_Engineering {
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Parse flow verbs
|
||||
switch (command) {
|
||||
case "if":
|
||||
if (commandParameters.Length == 1) {
|
||||
verbChunks.Add(new IfChunk(ValueFactory.CreateValue(rootValueStorage, commandParameters[0])));
|
||||
chunkDepth = verbChunks.Count - 1;
|
||||
currentChunk = verbChunks[chunkDepth];
|
||||
parsed = true;
|
||||
tmpVerb = new NoOp();
|
||||
} else if(commandParameters.Length >= 2) {
|
||||
string commandAfterIf = fullCommand.Substring(fullCommand.IndexOf(",") + 1); // find the first ,
|
||||
IValue conditional = ValueFactory.CreateValue(rootValueStorage, commandParameters[0]); //make the conditional
|
||||
IVerb AfterIf = MakeVerb(drawer, commandAfterIf); //make the following command
|
||||
tmpVerb = new IfChunk(conditional, AfterIf); //Create the chunk
|
||||
parsed = true;
|
||||
} else throw new Exception(command + " has an incorrect number of parameters");
|
||||
break;
|
||||
}
|
||||
|
||||
if (!parsed) {
|
||||
List<IValue> parameters = new List<IValue>();
|
||||
if (!(commandParameters == null)) foreach (string parameter in commandParameters) {
|
||||
parameters.Add(ValueFactory.CreateValue(rootValueStorage, parameter));
|
||||
}
|
||||
int parameterLength = parameters.Count;
|
||||
|
||||
|
||||
|
||||
//process drawing commands and extras
|
||||
switch (command) {
|
||||
//Drawing commands
|
||||
@@ -147,7 +168,7 @@ namespace Advanced_Software_Engineering {
|
||||
if (parameterLength == 2) {
|
||||
tmpVerb = new Rectangle(drawer, parameters[0], parameters[1]);
|
||||
} else if (parameterLength == 8) {
|
||||
return new Quadrilateral(drawer,
|
||||
tmpVerb = new Quadrilateral(drawer,
|
||||
new PointValue(parameters[0], parameters[1]),
|
||||
new PointValue(parameters[2], parameters[3]),
|
||||
new PointValue(parameters[4], parameters[5]),
|
||||
@@ -234,6 +255,7 @@ namespace Advanced_Software_Engineering {
|
||||
default:
|
||||
throw new Exception("Unknown command or cannot parse");
|
||||
}
|
||||
}
|
||||
|
||||
if (chunkDepth == 0) return tmpVerb;
|
||||
currentChunk.AddVerb(tmpVerb);
|
||||
|
||||
Reference in new issue
Block a user