[Edit] Da der Thread viele Aufrufe hat und bei Google auch zügig gefunden wird, verlinke ich hier oben noch mal das
GitHub Repo, da dieses wohl ist was viele suchen werden (Code).
So mich hat das etwas frustriert mit dem Shader Kram, daher mache ich gerade mal was anderes
Ich versuche eine eigene Sprache zu entwickeln! Das klappt auch soweit eigentlich ganz gut.
Wenn das ganze was wird baue ich es in meine Engine ein, wenn nicht nehme ich was fertiges. Ich finds aber echt ganz interessant.
Hier mal ein Beispiel:
|
Quellcode
|
1
2
3
4
5
6
7
8
|
# single line comment
_a = 5 # int
_b = 3 # noch ein int
if(_a > _b){
print "Hallo Welt!" # Konsolenausgabe
}
|
Also recht einfach. Folgendes funktioniert schon:
1. Kommentare (beginnend mit #) werden rausgeschmissen (außer in strings natürlich).
2. Der Code wird in Token zerlegt, also z.B. _a = 5 in "_", "a", "=" und "5".
3. Die Token werden in einen Syntax Tree geparsed.
4. Der Syntax Tree wird binär in eine Datei geschrieben (mit Werten und Variablennamen).
5. Der Code kann eingelesen und "ausgeführt" werden.
Aktuell ist natürlich nicht alles drin. Ich versuche erstmal Variablen einzulesen und auszugeben:
|
Quellcode
|
1
2
|
_a = 5
_b = 3
|
Wenn ich den Syntax Tree ausgebe (rekursirv):
|
Quellcode
|
1
2
3
4
5
6
7
8
|
_
a
=
5
_
b
=
3
|
Wenn ich die VM laufen lasse (und dabei Testweise in die Konsole schreibe):
|
Quellcode
|
1
2
3
4
5
6
7
8
|
Variable
a
Assignment
5
Variable
b
Assignment
3
|
Also soweit schon mal recht cool.
Was ich mich jetzt frage: wie speichere ich dynamisch (!) Variablen? Also später auch Objekte die dynamisch angelegt werden können?
Gehört habe ich von der Möglichkeit eines Stacks, also wenn Variablen temporär genutzt werden push() und pop(), für die anderen wird der Name (string) aus dem Code in einen Index umgewandelt.
Java macht aus dem Namen glaube ich einen Hash Wert, der dann als eine Art Index dient.
Also, was würdet ihr nehmen/bietet sich da an?
Den ganze Code gibts
hier.