Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Sa Jul 05, 2025 01:42

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Script Engine entwickeln
BeitragVerfasst: Mo Apr 12, 2010 15:15 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

ich will jetzt endlich mal anfangen mir meine Script Engine für meine GameEngine zu basteln.
Wie immer will ich es mal wieder alles selbst machen, da es mir nicht darum geht schnell ne Lösung zu haben, sondern um den lern effekt und einfach den spaß am Programmieren :)

Das Problem... ich hab zwar so in ganz grundlegenden zügen irgendwie ne vorstellung davon wie das ganze funktioniert, aber bekomm das alles nicht ganz recht aufgereiht in meinem Kopf grad, bzw.. ein paar schritte im ablauf einer Script Sprache sind mir noch nich ganz klar.

Deswegen war ich jetzt auf der suche nach einem Tutorial.

Zuerst natürlich das im Wiki angeschaut, allerdings... das hilft mir mal so mehr oder weniger überhaupt nicht weiter. Das ist eher ein großer haufen source code in (sorry) schrecklichem Stil geschrieben (geschachtelt bis zum geht nichtmehr, so das man ohne sich den code 5 tage lang anzuschauen nichtmal ansatzweise verstehen kann was da passiert)...


Dann bin ich auf das Tutorial hier gestoßen:
http://www.flipcode.com/archives/Implem ... view.shtml

Macht zwar einen guten eindruck, allerdings direkt die ersten 2 Schritte (Lexer und Parser) werden damit abgetan "Den Lexer erstellt das Programm LEX für uns.. den Parser das programm BISON"... toll, 2 programme die mir source code generieren... natürlich steh im tutorial dann nix dazu was der Lexer und Parser genau machen, bzw wie das resultat aussieht etc..

Und groß andere Tutorials hab ich nicht gefunden..

Hat evtl bei euch wer noch nen tollen link?
Oder mag wer mal so den groben ablauf erklären?

Den ScriptSource einzulesen und in Tokens etc zu wandeln ist kein problem.. das ist mir klar wie das geht.
Bei mir hapert es dann daran diese Tokens weiter zu verarbeiten... da wird immer eine "Tabelle" angesprochen, aber ich hab keinen plan was das sein soll ... :(

Auch würde ich gern eine Scriptsprache machen die OOP beherscht (Reicht auch nur in Grundzügen.. also Vererbung müßte nich sein).. aber ich denk das ist am anfang dann nochmal nen ganzes stück schwieriger, oder?

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Script Engine entwickeln
BeitragVerfasst: Mo Apr 12, 2010 17:49 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Lex und Yacc erzeugen unfreundlicherweise genauso verschachtelten code... Das liegt an der Methode des rekursiven Abstiegs der hier verwendet wird und kaum zu vermeiden ist. Drucke Dir die Codebeispiele doch einmal aus und lese sie langsam durch. Die gewählten Funktionen-Namen sollten sich an der EBNF orientieren - genauso die Schachtelung. Ausserdem ist die Schachtelung gar nicht so schlecht, weil man dann sieht was zusammengehört - und alles was du gerade nicht sehen willst blendest du aus.

Niklaus Wirth hat sich öfter darüber ausgelassen wie man Compiler schreibt - Wenn man weis wie das geht kann man Scriptsprachen stressfrei interpretieren. Siehe etwa: http://www-old.oberon.ethz.ch/WirthPubl/CBEAll.pdf . Ist meiner Erninnerung nach empfehlenswert.

Ansonsten....
Create Your Own Domain-Specific and General Programming Languages. ISBN-10: 1-934356-45-X . EAN: 9781934356456
Habe ich vor kurzem in der c't entdeckt. Obs was taugt kann ich nicht sagen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Script Engine entwickeln
BeitragVerfasst: Mo Apr 12, 2010 17:55 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Delphic hat geschrieben:
Lex und Yacc erzeugen unfreundlicherweise genauso verschachtelten code... Das liegt an der Methode des rekursiven Abstiegs der hier verwendet wird und kaum zu vermeiden ist. Drucke Dir die Codebeispiele doch einmal aus und lese sie langsam durch. Die gewählten Funktionen-Namen sollten sich an der EBNF orientieren - genauso die Schachtelung. Ausserdem ist die Schachtelung gar nicht so schlecht, weil man dann sieht was zusammengehört - und alles was du gerade nicht sehen willst blendest du aus.

Niklaus Wirth hat sich öfter darüber ausgelassen wie man Compiler schreibt - Wenn man weis wie das geht kann man Scriptsprachen stressfrei interpretieren. Siehe etwa: http://www-old.oberon.ethz.ch/WirthPubl/CBEAll.pdf . Ist meiner Erninnerung nach empfehlenswert.

Ansonsten....
Create Your Own Domain-Specific and General Programming Languages. ISBN-10: 1-934356-45-X . EAN: 9781934356456
Habe ich vor kurzem in der c't entdeckt. Obs was taugt kann ich nicht sagen.


Danke :)

Mir geht es bei dem LEX und YACC kram garnichtmal darum das der Code so furchtbar unüberichtlich ist, das darfer meinetwegen gern sein wenn es so der Optimale weg ist .. :)
Ich würde nur gern mal wissen was das ergebnis davon ist...

Also ich habe meinen ScriptSource und geb den in den Lexer.. was genau tut der damit, bzw wie schaut das ergebnis aus was da raus kommt..? Und dann als nächsten Schritt der Parser (YACC), dem geb ich das ergebnis vom Lexer und der macht was damit.. wie schaut da das ergebnis aus?

Wenn ich weiß was da rauskommen soll wird mir das ganze vermutlich klarer und ich kann mir die funktionen selber basteln, bzw kann wesentlich leichter verstehen was der Code-haufen im Tutorial macht :) Aber ohne das man weiß was da am ende Rauskommt ist es halt sehr verwirrend :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Script Engine entwickeln
BeitragVerfasst: Mo Apr 12, 2010 19:05 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Aya hat geschrieben:
Also ich habe meinen ScriptSource und geb den in den Lexer.. was genau tut der damit, bzw wie schaut das ergebnis aus was da raus kommt..? Und dann als nächsten Schritt der Parser (YACC), dem geb ich das ergebnis vom Lexer und der macht was damit.. wie schaut da das ergebnis aus?

Also der Lexer liest den zu verarbeitenden quellcode und zerlegt ihn in symbole. Ein Symbol ist etwa ein einzelner Int, ein einzelnes Schlüsselwort, ein String o.ä. . Dies geschieht normalerweise sequentiell und man kann normalerweise nach irgendeinem Iteratorprinzip immer zum nächsten Symbol fortschreiten.

Wenn die EBNF deiner Scriptsprache folgendes erlaubt:
Code:
program = PROGRAM ident "." BEGIN statementseq END "."
statementseq = { NOOP | EXIT }
ident = ("A"|...|"Z") {"A"|...|"Z"|"0"|.."9"}

Schlüsselwrter sind groß geschrieben - jedes schlüsselwort macht der lexer zu einem eigenständigem symbol. ausserdem kennt er das symbol ident. Irgendwo im lexer ist also etwas wie
Code:
enum Symbols = {program, dot, ident, begin, end, NOOP, EXIT}

definiert.

Und der Parser hat nun zwei Funktionen program und statementseq. Als erstes wird program(...) aufgerufen, die prüft ob der lexer als erstes das symbol program liefert, dann ident, dann dot, dann begin. Jetzt ruft es statementseq (akzeptiert die symbole noop und exit und iteriert den lexer solange wie sie kommen) auf, wenn das zurückkehrt wird noch nach end und dann punkt geprüft. Dann hat man schonmal die syntax geprüft.

Wenn das mal klappt, erweitert man den Parser daß er auf den Kontext achtet - ob Variablen richtig deklariert sind, alle typen existieren und all so ne kram. So komplex ist mein mini-beispiel aber nicht :-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Script Engine entwickeln
BeitragVerfasst: Mo Apr 12, 2010 19:24 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wenn dir Aya diese Erklärung hilft, und das im Tut nicht beschrieben ist, vielleicht kannst du oder Delphic das in dem Tut noch reinhängen?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 13 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 16 Queries | GZIP : On ]