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:

BasicInterpreter in Basic

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Spezielle Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
gripslund



Anmeldungsdatum: 09.03.2006
Beiträge: 10
Wohnort: Zeckerin

BeitragVerfasst am: 09.03.2006, 21:34    Titel: BasicInterpreter in Basic Antworten mit Zitat

Guten Tag,
ich bin auf der Suche bzw. suche Infos zur Programmierung eines BasicInterpreters in QB. Ich möchte meine Casio-BasicPrgs. ohne Konvertierung auf dem PC testen können. Der Interpreter des Casio verwendet Zeilennummern. Ich habe habe keine rechte Idee, wie ich anfangen soll. In QB deshalb, weil ich andere Programmiersprachen nicht kann (C,C++,...). Gibt es vielleicht irgendwo Literatur darüber?
Danke.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
E-P-S



Anmeldungsdatum: 16.09.2004
Beiträge: 500
Wohnort: Neuruppin

BeitragVerfasst am: 09.03.2006, 22:41    Titel: Antworten mit Zitat

schau mal hier:

http://eps.designdevil.de/index.php?show=quickbasic/tutorials&tut=script

hoffe das hilft weiter.
_________________
Man kann sich öfter als zweimal im Leben halb tot lachen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 10.03.2006, 17:30    Titel: Antworten mit Zitat

Gewisse Befehle werden einfach Recht hart, zum Beispiel der der Gleichungen auflösst.
(Hatte schon Taschenrechner Programme die diese Funktion Missbraucht haben grinsen)

Eine Alternative zum Interpretieren, wäre es Funktionen/Subroutinen zu schreiben die die Casio Befehle mit den QBasic Befehlen verbinden.
(Schwer zu beschreiben)

Eine weitere möglichkeit wäre es, die Programme durch einen selbst geschriebenen Convertor zu jagen und dann in QBasic auszuführen.

Kannst mal bitte ein Beispiel Programm (In Casio Basic) Posten?
So Trocken darüber nach denken ist nicht so einfach und wenn ich den Code sehe, kommt mir vielleicht noch ein Trick in den Sinn.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
dreael
Administrator


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

BeitragVerfasst am: 10.03.2006, 21:26    Titel: Antworten mit Zitat

Auch eine Variante: Vielleicht hat ein Freak einen kompletten Casio-Pocketcomputer-Emulator geschrieben, so dass man dort die Anwendung weiterhin verwenden könnte, wenn einmal das richtige Gerät den Geist aufgibt.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
gripslund



Anmeldungsdatum: 09.03.2006
Beiträge: 10
Wohnort: Zeckerin

BeitragVerfasst am: 10.03.2006, 22:05    Titel: Antworten mit Zitat

Hallo und guten Abend,
erstmal vielen Dank für die Antworten. Die Sache mit der MiniScriptEngine von E-P-S sieht schon ganz gut aus. Das die Umsetzung nicht leicht wird, ist mir klar. Wie z.B. Gleichungen oder Ähnliches.
Ich will es auch nicht perfekt machen, sprich: es brauchen zum Schluß nur die Befehle drin sein, die ich persönlich brauche. Ein Emulator muß es nicht werden. Dazu reicht mein Wissen und Können auch nicht aus. Und die Zeit hätte ich auch nicht.
Wenn natürlich schon jmd. einen Emu (geschrieben) hat, tja das wär' schon gut.
Der CASIO ist übrigens ein FX-880P. 12 Jahre alt, 64KB und zuverlässig.
Hier ein Bsp.-Prog., nicht schön aber läuft und vertreibt die Zeit:

100 ' Master-Mind V 1.02
110 ' von GFB-Soft
120 ' am 31.05.2005
200 CLS:SET N:DIM X(4),X$(4),Y$(4)
205 PRINT" MASTER-MIND V1.02";:PRINT:FOR LL=1 TO 500:NEXT LL
210 X(1)=INT(RAN#(-1)*6)+1
215 PRINT " *";
220 X(2)=INT(RAN#(-1)*6)+1
230 IF X(2)=X(1) THEN GOTO 210
235 PRINT " *";
240 X(3)=INT(RAN#(-1)*6)+1
250 IF X(3)=X(1) OR X(3)=X(2) THEN GOTO 240
255 PRINT " *";
260 X(4)=INT(RAN#(-1)*6)+1
270 IF X(4)=X(1) OR X(4)=X(2) OR X(4)=X(3) THEN GOTO 260
275 PRINT " *";:PRINT
280 FOR LL=1 TO 4
290 X$(LL)=RIGHT$(STR$(X(LL)),1)
300 NEXT LL
310 X$(0)=X$(1)+X$(2)+X$(3)+X$(4)
320 VER=0
350 VER=VER+1:PRINT VER;": ";
360 FOR LL=1 TO 4
370 Y$(LL)=""
380 NEXT LL
390 FOR LL=1 TO 4
400 Y$(LL)=INPUT$(1)
410 PRINT Y$(LL);
420 NEXT LL:PRINT " ";
430 IF Y$(1)=Y$(2) AND Y$(2)=Y$(3) AND Y$(3)=Y$(4) THEN PRINT:GOTO 350
440 FOR LL=1 TO 4
450 IF Y$(LL)<"1" OR Y$(LL)>"6" THEN PRINT:GOTO 350
460 NEXT LL
470 A$=""
480 FOR LL=1 TO 4
490 IF Y$(LL)=X$(LL) THEN A$=A$+"o"
500 NEXT LL
510 IF Y$(1)=X$(2) OR Y$(1)=X$(3) OR Y$(1)=X$(4) THEN A$=A$+"x"
520 IF Y$(2)=X$(1) OR Y$(2)=X$(3) OR Y$(2)=X$(4) THEN A$=A$+"x"
530 IF Y$(3)=X$(1) OR Y$(3)=X$(2) OR Y$(3)=X$(4) THEN A$=A$+"x"
540 IF Y$(4)=X$(1) OR Y$(4)=X$(2) OR Y$(4)=X$(3) THEN A$=A$+"x"
550 PRINT A$;:PRINT
560 IF A$<>"oooo" THEN 350
570 PRINT "O.K. Fertig. ";VER;"Versuche"

Ich denke mal das Ding ist selbsterklärend und nicht perfekt.
Aber man sieht: ganz "normales" BASIC, bis auf ein paar gerätespezifische Besonderheiten. Aber es läuft eben nicht direkt unter QB.
Na ja. Ich werd' mich mal mit der Idee der MSE beschäftigen, mal sehen, wie weit ich komme.
Schönes Wochenende Euch allen. Ich muß (darf) arbeiten, Spätdienst.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 11.03.2006, 09:28    Titel: Antworten mit Zitat

Wunder schönes Basic!
Mein Classpad 200 Taschenrechner hat im vergleich der zu ein echtes sch.. Basic.

Kannst du mir sagen was diese Befehle machen:
Code:
SET N
(RAN#(-1)


Provisorisch hab ich das mal gebastelt:
Das gehört oben an den Casio-Code:
Code:
DECLARE SUB SET (a!)
DECLARE FUNCTION RAN# (a!)
RANDOMIZE TIMER

Und das unter den Casio-Code:
Code:
FUNCTION RAN# (a)
RAN# = RND
END FUNCTION

SUB SET (a)
END SUB

Wenn du dieser paar Zeilen einfügst, funktioniert das Programm bereits recht gut.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
gripslund



Anmeldungsdatum: 09.03.2006
Beiträge: 10
Wohnort: Zeckerin

BeitragVerfasst am: 11.03.2006, 10:01    Titel: Antworten mit Zitat

Guten Morgen,
hab' noch etwas Zeit.

Zur Bedeutung von SET N:
- spezifiziert das Ausgabeformat, bzw. hebt in diesem Fall alle Spezifikationen auf
- SET F2 würde bedeuten 2 Dezimalstellen
- SET E5 würde bedeuten 5 signifikante Stellen
- SET N hebt halt alles auf -> 12-stellig
Kann man ja evtl. mit PRINT USING umschreiben?

Zur Bedeutung von RAN#(Argument):
- erzeugt Zufallszahlen im Bereich 0 - 1
- Argument=1 -> Zufallszahlen werden aus der gleichen Tabelle erzeugt
- Argument=0 -> die letzte Zufallszahl wird wiederholt
- Argument=-1 -> Zufallszahlen werden aus der Zufallstabelle erzeugt
Kann man auch gut umschreiben, oder?

Also bis jetzt habe ich folgende Idee. Mit der von EPS abgewandelten MSE das Casio-Prg. zeilenweise auswerten. Befehle die umgewandelt werden müssen, werden bearbeitet und an der entsprechenden Stelle in der Programmzeile wieder eingefügt. Dann wieder abspeichern als QB-Datei. Könnte der für mich gangbarste Weg sein, weil ich bin nun mal nicht der Profi. Aber so könnte es doch funktionieren.
Dann ist es halt kein Interpreter in QB sondern nur ein Programm das von einem Dialekt in einen anderen umwandelt.
So nun Schluß, ich muß jetzt zur Arbeit. Bis Montag.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 11.03.2006, 10:18    Titel: Antworten mit Zitat

Ich gehe mit meiner Lösung einen ganz ähnlichen Weg, vielleicht lassen sie sich kombinieren.

Ich schlage vor, das man Befehle die Leicht umzusetzen sind in Sub Routinen/Funktionen auslagert. (Also der RAN# Befehl als Beispiel)
Und Befehle die Ganz anders arbeiten, aber ähnlich heissen (Print) werden von einem Konverter umgewandelt.

Ich hab schnell mal meine Subroutinen angepasst:
Das gehört wie gesagt vor das Casio Basic Programm:
Code:
DECLARE SUB SET (a!)
DECLARE FUNCTION RAN# (a!)
RANDOMIZE TIMER

Und das in die Zeilen nach dem eigentlichen Casio Basic Programm:
Code:
FUNCTION RAN# (a)
STATIC alt#
IF a <> 0 THEN
        alt# = RND
END IF
RAN# = alt
END FUNCTION

SUB SET (a)
END SUB
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
gripslund



Anmeldungsdatum: 09.03.2006
Beiträge: 10
Wohnort: Zeckerin

BeitragVerfasst am: 13.03.2006, 23:16    Titel: Antworten mit Zitat

Guten Abend,
ich denke, dass ich 'ne akzeptable Lösung gefunden habe. Natürlich KEIN Interpreter im Interpreter. Wie schon erwähnt: einlesen des Casio-Prg., untersuchen auf Befehle die nicht kompatibel sind zu QB, entsprechende Umwandlung dieser Befehle, und zum Schluss wird alles als *.BAS abgespeichert. Das spart mir jede Menge an SUB's u.ä., damit komme ich bis heute nicht richtig klar. Mit Hilfe der Script-Engine von E-P-S (nat. leicht verändert) brauche ich jetzt nur noch einen Durchlauf. Das schafft sogar mein "Super"-Schlepptop (20MHz) in Sekunden. Das Programm sieht sicher nicht sehr schön aus, erfüllt aber seinen Zweck - wenn auch noch nicht alles implementiert ist.
Leider hat es "ohne Konvertierung" - wie ich anfangs hoffte - nicht hingehauen, vielleicht bekommt es ja jemand hin.
Danke an Alle für die Denkanstöße.
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 -> Spezielle Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
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