Also, vielleicht hilft dieses Gerüst etwas beim Verständnis. Ich habe das Abarbeiten der eigentlichen Befehle jetzt in verschiedene Funktionen ausgelagert, sodass das Konzept etwas deutlicher wird.
Code:
class Parser
{
private int lineNumber = 0;
private string[] code;
public void load(string file) { ... }
private void parse()
{
// ende?
if(lineNumber >= code.Length)
return;
string line = code[lineNumber];
line.trim();
// echo?
if(line.StartsWith("echo"))
execEcho(line);
// if?
else if(line.StartsWith("if("))
{
if(!execCompare(line))
{
// if-Block nicht ausführen
skipBlock();
}
} else if(line.equals("{") || line.equals("}")); // { und } einfach überspringen.
// nächste Zeile
lineNumber++;
parse();
}
private execEcho(string line) { ... }
private execCompare(string line) { ... }
private skipBlock() { ... }
}
Die load-Methode läd dein File Zeile für Zeile in das code-Array.
Dann rufst du parse() auf. Die Methode nimmt sich nun Zeile für Zeile vor (bei jedem Aufruf eine Zeile), bis es keine mehr gibt.
Dann wird geprüft, ob die Zeile eine if-Anweisung oder ein echo enthält. Enthält es ein echo, wird execEcho aufgerufen.
Bei if ist die Sache ein klein bisschen komplizierter. Hier muss erstmal geprüft werden, ob die Bedingung überhaupt erfüllt ist. Das wird durch execCompare() gemacht. Ist die Bedingung nicht erfüllt, muss der Block übersprungen werden. Das macht skipBlock(). Ansonsten kann einfach die nächste Zeile ausgewertet werden.
execEcho ist nun nicht mehr so schwer. Der Parameter line, der dabei übergeben wird, sollte ja in etwa so aussehen:
echo "Richtig";
skipBlock ist ganz einfach: Du erhöhst lineNumber einfach so lange, bis code[lineNumber] gleich "}" ist.
Bei execCompare würde ich dir raten, erstmal das if( und die Klammer ganz hinten loszuwerden. Dann solltest du herausfinden, welchen Vergleichsoperator du brauchst (== oder <= oder was auch immer). Dies ist einfach, wenn == nicht auch in deinem String vorkommen kann, also wenn
if(lala == "x==y")
nicht erlaubt ist. Wenn du dann an deinem Operator den string splittest, bekommst du die beiden Dinge, die du vergleichen möchtest.
Natürlich muss die Syntax dabei genau stimmen. Also es muss if heißen, nicht IF. Die Befehle müssen am Anfang der Zeile stehen (bzw. es dürfen nur Leerzeichen davor sein). { und } müssen in einer eigenen Zeile sein. Und so weiter... Außerdem würde auch so etwas gehen:
if(heute=="abc")
echo "Richtig";
}
All diese Dinge kann man natürlich auch noch abfragen, aber das wird für das Beispiel zu kompliziert.