 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
AndT
Anmeldungsdatum: 02.04.2007 Beiträge: 481
|
Verfasst am: 01.11.2007, 21:28 Titel: Problem mit Interpreter |
|
|
Bei einen erneuten, einen Interpreter für eine einfache Programmiersprache, habe ich das Problem, das die Argumente (Der String arg) nicht immer richtige erkannt wird.
Der Code..
Code: | ' Systeminit
dim as integer lines = 1
dim shared as string LineCode(9999)
dim shared as integer aktline
dim as string cmdshell
dim shared as integer ln = 1
dim shared as integer md
' Core
Print ""
sub fb_low(cmd as string, arg as string) ' Einfache Freebasic Befehle (dieser abschnitt ist schon etwas ausgereift)
select case cmd
case "print"
print arg
case "screen"
screen val(arg)
case else
Print "Unbekannter Befehl (Zeile";aktline;") ";
If cmd="" then
Print "=";linecode(aktline)
else
Print "=";linecode(aktline);") =";cmd;" ";arg
end if
end select
end sub
'____________ Runlib ____________
sub runlib ' Erkennt die Eingaben nicht richtig :( ..
dim as string cmd
dim as string arg
for aktline = 1 to ln
cmd = left(linecode(aktline),instr(Linecode(aktline)," ")-1)
arg = right(linecode(aktline),instr(Linecode(aktline)," ")-1)
fb_low(cmd,arg) ' Einfache (LOW) Befehle werden hier Interpretiert
next
Print "Programm beenden mit Taste"
sleep
end sub
'____________ Help ____________
sub help
print
Print "Verfuegbare Befehle Print, Screen"
print
Print "Zur Eingabeconsole mit Enter"
do
sleep 1
loop until inkey = chr(13)
end sub
'Programm eigene Functionen
sub InternControl(cmdshell as string)
cmdshell = lcase(cmdshell)
if cmdshell = "_exit" then reset:screen 0:color 7,0: : system
if cmdshell = "_run" then ln-=1:runlib
if cmdshell = "_help" then help : ln-=1 : md = 1
end sub
' Eingabe
do
rn:
cls
locate 1,1:Print "Freebasic Programmaker (minimaltestcode)"
locate 2,1:Print "_run startet das Progamm, _exit beendet das Programm, _help listet Befehle auf"
locate 4,1
if ln < 1 then ln = 1
locate 3,1:Print "Aktuelle Zeile : ";ln
input "Eingabe : ",cmdshell ' Hier werden die Befehle eingegeben
If Left(cmdshell,1)="_" then InternControl(cmdshell)
if md = 1 then md = 0 : goto rn
if cmdshell <> "" then LineCode(ln) = cmdshell:ln+=1
loop
|
_________________ Bis irgendwann...  |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 01.11.2007, 21:42 Titel: |
|
|
Code: | cmd = LEFT(linecode(aktline),INSTR(Linecode(aktline)," ")-1)
arg = RIGHT(linecode(aktline),INSTR(Linecode(aktline)," ")+1) '<--***
|
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
AndT
Anmeldungsdatum: 02.04.2007 Beiträge: 481
|
Verfasst am: 01.11.2007, 21:57 Titel: |
|
|
Code: | arg = MID(linecode(aktline),INSTR(Linecode(aktline)," ")+1,len(linecode(aktline))) |
schon besser  _________________ Bis irgendwann...  |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 01.11.2007, 23:11 Titel: |
|
|
Also manchmal frag ich mich wirklich...
Wolltest du damit Volta irgendwie korrigieren? Beeeeeeeeeep, fehlgeschlagen. Was du da hinzugefügt hast, ist nicht irgendwie sicherer oder sonstwas, sondern einfach nur unnötig und theoretisch sogar unsicherer (da LEN(linecode) über das stringende hinausschießt.
Bitte, hör in zukunft einfach auf, scheinbar "bessere" Codes von dir zu geben...
(Jojo kühlt sich erstmal mit Reeds toller musik ab ) _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
|
|
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.
|
|