Private
Public Access
Implemented For loops
This commit is contained in:
1 parent
39dc69d7b1
commit
7d9b53f80c
3 files changed
+46
No files matched your search
+1
@@ -93,6 +93,7 @@
|
||||
<Compile Include="Verbs\DrawingVerbs\Shape\Square.cs" />
|
||||
<Compile Include="Verbs\DrawingVerbs\Shape\Triangle.cs" />
|
||||
<Compile Include="Verbs\Flow\DeclareMethod.cs" />
|
||||
<Compile Include="Verbs\Flow\ForChunk.cs" />
|
||||
<Compile Include="Verbs\Flow\IfChunk.cs" />
|
||||
<Compile Include="Verbs\Flow\IVerbChunk.cs" />
|
||||
<Compile Include="Verbs\Flow\MethodChunk.cs" />
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
using Advanced_Software_Engineering.Verbs.Value;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Advanced_Software_Engineering.Verbs.Flow {
|
||||
public class ForChunk : VerbChunk, IVerbChunk, IVerb {
|
||||
private readonly IValue conditional;
|
||||
private readonly ValueStorage valueStorage;
|
||||
|
||||
public ForChunk(ValueStorage valueStorage, IValue conditional) : base() {
|
||||
this.conditional = conditional;
|
||||
this.valueStorage = valueStorage;
|
||||
valueStorage.IncreaseStack();
|
||||
}
|
||||
|
||||
public ForChunk(ValueStorage valueStorage, IValue conditional, IVerb oneLineVerb) : base(new List<IVerb> { oneLineVerb }) {
|
||||
this.conditional = conditional;
|
||||
this.valueStorage = valueStorage;
|
||||
valueStorage.IncreaseStack();
|
||||
}
|
||||
|
||||
public new void ExecuteVerb() {
|
||||
int iterations = conditional.ToInt();
|
||||
|
||||
valueStorage.IncreaseStack();
|
||||
for (; iterations > 0; iterations--) base.ExecuteVerb();
|
||||
valueStorage.DecreaseStack();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -111,6 +111,22 @@ namespace Advanced_Software_Engineering {
|
||||
} else throw new Exception(command + " has an incorrect number of parameters");
|
||||
break;
|
||||
|
||||
case "for":
|
||||
if (commandParameters.Length == 1) {
|
||||
verbChunks.Add(new ForChunk(rootValueStorage, ValueFactory.CreateValue(rootValueStorage, commandParameters[0])));
|
||||
chunkDepth = verbChunks.Count - 1;
|
||||
currentChunk = verbChunks[chunkDepth];
|
||||
parsed = true;
|
||||
tmpVerb = new NoOp();
|
||||
} else if (commandParameters.Length >= 2) { //single line if
|
||||
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 ForChunk(rootValueStorage, conditional, AfterIf); //Create the chunk
|
||||
parsed = true;
|
||||
} else throw new Exception(command + " has an incorrect number of parameters");
|
||||
break;
|
||||
|
||||
case "def":
|
||||
if (drawer.verbChunkGeneratingMethod) throw new Exception("Cannot declare a method while declaring method");
|
||||
else if (chunkDepth != 0) throw new Exception("Cannot declare a method above root chunk"); //TODO, explain better
|
||||
|
||||
Reference in new issue
Block a user