Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Kann man einen Basicinterpreter in FB programmieren?
Gehe zu Seite Zurück  1, 2, 3, 4  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 26.07.2007, 13:44    Titel: Antworten mit Zitat

Noch eine Idee:
Wenn CMD die ID des Befehls ist, kann CMD doch ein Array sein.
z.B.
Code:
dim CMD(1 to 4) as string
CMD(1) = "print"
CMD(2) = "input"
CMD(3) = "do"
CMD(4) = "loop"
Dann kann man in einer Schleife das Array durchsuchen und spart sich den ersten IF-Block. lächeln

(Ich hoffe, dass man sieht, dass ich mir Mühe gebe zu helfen)
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 26.07.2007, 13:45    Titel: Antworten mit Zitat

Man sollte auch Konstanten für die Befehle festlegen imho. lächeln
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 26.07.2007, 13:46    Titel: Antworten mit Zitat

Zum Titelthema: Ist selbstverständlich kein Problem, der sog. Compilerbau stellt ein eigenes Gebiet in der Informatik dar und war während meines Studiums auch ein separates Fach.

Wichtig ist einfach, dass Du Dich mit Syntaxdiagrammen und -darstellungen wie beispielsweise EBNF und Eisenbahndiagramm intensiver auseinandersetzst. Daneben stellt das Generieren von Maschinencode für eine bestimmte Prozessorarchitektur eine Welt für sich dar, was ebenfalls nur mit ganz guten Assemblerkenntnissen gemeistert werden kann.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 26.07.2007, 13:49    Titel: Antworten mit Zitat

Da hätte ich mal eine Frage in eigener Sache:
Gibt es dafür keine Bibliotheken, die z.B. vorgefertige Routinen für einfache Befehle wie print, locate, input bietet, oder ASM => Maschinencode übersetzt?
Die Umwandlung ASM=>Maschinencode macht schließlich fast jeder Compiler, deshalb ffrage ich.
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 26.07.2007, 14:03    Titel: Antworten mit Zitat

Nein, afaik nicht.
Jeder Compiler optimiert anders und kann je nach Sprache auch anders optimieren.
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 26.07.2007, 14:31    Titel: Antworten mit Zitat

Wie lässt sich sowas mit Benutzerdefinierten Strings lösen??
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 26.07.2007, 14:43    Titel: Antworten mit Zitat

Was genau meinst du mit "benutzerdefiniert"?
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 26.07.2007, 14:46    Titel: Antworten mit Zitat

Wenn man jetzt der Datei schreiben würde
Code:
ABCDEFG$="hallo"

muss dieser string im interpreter irgendwie weiter verarbeitet werden können
Das muss auch mit Zahlen gelöst werden.
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 26.07.2007, 15:05    Titel: Antworten mit Zitat

Anders:
Wie kriegt mann es gebacken das belibige Strings zum beispiel mit Print angezeigt bekommt??
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 26.07.2007, 15:14    Titel: Antworten mit Zitat

eine Function/Sub

irgendwas wie, if befehl="print" Then.... parameter auslesen....
und die eigene function mit diesen Parameter aufrufen
zb meinprint (string) oder so...

die funktion ist dann eigentlich nichts anderes wie
sub meinprint (parameter as string)
print parameter
end sub

so in etwa... es gehort mehr dazu als nur den Befehl auszulesen... auch parameter ect gehoeren dazu....
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 26.07.2007, 15:38    Titel: Antworten mit Zitat

Bau einen Tokenizer. Der nimmt Zeichen für Zeichen des Sources, und entscheidet, was das genau ist. Z.B. ein Befehl, eine Konstante, etc. Danach fällt das weitere Interpretieren leichter.

Sonst hab ich hier auch noch ein etwas älteres Tutorial zum Compilerbau. Nicht unbedingt vollständig, nicht unbedingt aktuell, aber auf jeden Fall informativ. lächeln
(Achja, du solltest Englisch und Pascal nicht scheuen. zwinkern)
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 26.07.2007, 15:46    Titel: Antworten mit Zitat

Meine Idee zu Variablen:
Statt einem Suffix ein Praefix verwenden; also statt Variable$ $Variable. Wie bei PHP. Dann kannst du Variablen (fast) wie Befehle verarbeiten.
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 26.07.2007, 16:51    Titel: Antworten mit Zitat

Kann man auch anders lösen.
Prüfe z.B. ob der aktuell herausgetrennte Stück Code (z.B. aus "MYVAR=15") als Befehl existiert. Wenn ja, kann der Interpreter schonmal gleich eine Fehlermeldung schmeißen, da das wahrscheinlich nicht die Aufrufkonvention eines Befehls ist (herausgetrennt würde in diesem Fall halt erstmal "MYVAR"). Weiters kann man ja immer noch überprüfen ob's eine Funktion ist (wobei ich Funktionen aus der Scriptsprache erstmal raushalten würde zwinkern).
Eben diese Sache (das heraustrennen bzw. herausarbeiten) wäre erstmal Arbeit des Tokenizers. Eine andere Sub könnte überprüfen, ob das entsprechende Token an dieser Stelle erlaubt ist.
Schau dir dazu am Besten mal oben genanntes Tutorial an.
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 26.07.2007, 16:54    Titel: Antworten mit Zitat

Hallo!

Interessant könnten für dich auch die Einsendungen der QB-/FB-Wettbewerbsaufgabe zur Programmierung eines Interpreters sein: http://www.qb-wettbewerb.de/index.php?c=showaufg&id=2

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
DL1YOV



Anmeldungsdatum: 28.02.2007
Beiträge: 7

BeitragVerfasst am: 26.07.2007, 17:52    Titel: Antworten mit Zitat

Klar geht das. Ich bin übrigens selbst grad dabei, sowas ähnliches zu programmieren. Es ist allerdings ratsam, sich mal etwas näher mit den Grundlagen des Compilerbaus zu beschäfitigen. Sehr schnell stößt man dann auf Begriffe wie "endlicher Automat", "Kellerautomat" usw. Ganz grob gesagt; Zuerst hat man einen Eingabedatenstrom (z.B. eine Datei oder einen String), der Zeichen für Zeichen untersucht wird. Stellt man fest, daß eine Zeichenfolge einem best. Muster entspricht, hat man als Ergebnis einen sog. Token. Diesen Schritt nennt man lexikalische Analyse. Bei der nachfolgenden syntaktischen Analyse wird dann geprüft, ob eine Reihe von Tokens einen gültigen vollständigen Befehl der jeweiligen Programmiersprache bilde. Ist das der Fall, wird eine entsprechende Aktion ausgeführt. Das mal so ganz grob als Ablaufschema. Ein Buchtip zum Thema ist z.B. das sog. "Drachenbuch" (Aho, Sethi, Ullmann: Compilers - Principles, Techniques and Tools). Die Codebeispiele darin sind zwar alle in C oder Pascal, lassen sich jedoch ohne größeren Aufwand auch nach Freebasic übertragen.

Gruß,

Oliver
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 26.07.2007, 21:57    Titel: Antworten mit Zitat

Für alle die sich für den Complierbau interessieren hilft http://de.wikipedia.org/wiki/Compilerbau bestimmt weiter zwinkern
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 27.07.2007, 13:44    Titel: Antworten mit Zitat

Ich hab ihn fast fertig..
Screen, Line und sogar der Open Befehl mitsamt Get, Put usw zwinkern
(Das das aber so häftig wird zu schreiben hätte ich nicht gedacht xD)
Ich brauche noch tipps wie man IF einbauen kann happy
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 27.07.2007, 14:08    Titel: Antworten mit Zitat

Einmal hab ich dir schon 'nen Link gepostet, dann noch Sebastian - beides führte zur Wettbewerbsseite zum Thema Interpreter.
Schau's dir dort halt mal an, sollte man allgemein so machen, wenn man Antworten auf seine Frage bekommt. peinlich
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 27.07.2007, 15:44    Titel: Antworten mit Zitat

Jo so bin ich doch noch auf den einen oder anderen Hinweis gekommen wies jetzt weiter geht.
Mein Programm ist inzwischen soweit, das ich mit leitigkeit schon am Basic vom C64 fast schon ran kommt.
Ich hab jetzt mein Interpreter neu Aufgebaut und die Befehle eine ID gegeben.
Das sieht inetwa so aus:
Code:
const IDNRS = 9
DIM AS STRING Befehl(1 to IDNRS)
Print "Befehle laden.."
FOR ID=1 to IDNRS
    READ Befehl(ID)
Print "ID";ID;" = "+Befehl(ID)
Next
sleep
   
' Befehldaten (ID Wird nach der Reihe verteilt)
DATA "PRINT"
DATA "INPUT"
DATA "OPEN"
DATA "FOR"
DATA "NEXT"
DATA "IF"
DATA "THEN"
DATA "DO"
DATA "LOOP"

Das ist nur ein kleiner Teil der unterstützten Befehle..
Diese die IDs sorgen ganz einfach dafür dass man nicht jedesmal den ganzen kram wie "Print","Input" usw
eingeben muss stattdessen nurnoch die ID wo Print usw drinn steht zwinkern
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 27.07.2007, 21:15    Titel: Antworten mit Zitat

Naja, bedenke aber mal bitte, dass dein BASIC nur auf dem Vorhandensein der Befehle von FreeBASIC basiert. Und quasi nicht wirklich viel selbst macht.
FB bzw. das BASIC vom C64 hingegen haben/hatten eine eigene RTL/eigene Umsetzungen der Befehle.

/edit:
Btw, du kannst das "Befehle werden geladen" weglassen. Das geht selbst auf 'nem wiiiiiiiiirklich alten System ruckzuck.
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2, 3, 4  Weiter
Seite 2 von 4

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz