Parsing

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Geeecko

Betreff: Parsing

BeitragMo, Jun 19, 2006 18:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich wollte mal fragen wie das mit dem Parsing geht.
Ich habe auch gesucht. Aber das erste mit dieser Stackmachin
habe ich nicht verstaden.
Sagen wir wir haben einen String: "GetPlayerX(player5-GetLive(player5))
player5=Zahl 5
live von player5=1
also wäre GetPlayerX(player4)
aber wie mache ich das ch die funktionen unterteile?
GetPlayerX(player5-GetLive(player5))

Kryan

BeitragMo, Jun 19, 2006 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
es ist fast unmöglich (also man muss sehr sehr gut sein, wenn man sowas gut hinkriegt)

am besten du benutzt nur einfache anweisungen:

hallo=1000
bravo=900
etc..
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

derAtomkeks

ehemals "Sethus"

BeitragMo, Jun 19, 2006 19:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach doch erstmal was leichteres, zum Beispiel Print Hallo Welt, oder so. Dann liest du den Befehl mit Mid (ab zeichen 1 bis zum Blank). Dann liest du die Parameter vom blank bis Ende, oder wenn du mehr befehle hast, bis zum nächsten Komma.

So schwer ist das garnicht!

Geeecko

BeitragMo, Jun 19, 2006 19:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Das habe ich auch schon gemacht.
Aber das mit diesem Befehl(Befehl) age beomme ich ne hin.
also das in einem Befhl noch ein befehl stht.

derAtomkeks

ehemals "Sethus"

BeitragMo, Jun 19, 2006 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Da musst du doch einfach die Parameter nochmal mit der liste der verfügbaren Befehle vergleichen. Und das verschachtelt sich dann ins Unendliche...

Da macht man einfach eine Funktion, die die befehle unf parameter aus einem angegebenen string heraufindet und ausführt. so kann man das theoretisch mit unendlich vielen befehlen ineinander hinbekommen
  • Zuletzt bearbeitet von derAtomkeks am Mo, Jun 19, 2006 19:46, insgesamt einmal bearbeitet

Geeecko

BeitragMo, Jun 19, 2006 19:45
Antworten mit Zitat
Benutzer-Profile anzeigen
gib mal code *g*

BtbN

BeitragMo, Jun 19, 2006 19:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde, wenn ich einen Script-Interpreter machen würde, würde ich mit dem Parsen wie folgt vorgehen:

- Zu aller erst würde ein 'Precompiler' Kommentare,Defines,... entfernen/auswerten.
- Dann würde ich Strings suchen und durch durchnummerierte Tokens ersetzen.
- Dann User-Funktionen und Statische Funktionen in einer Liste sammeln und deren Inhalt als einen Vor-Block speichern, der später in einen Block umgesetzt wird.
- Das selbe mit allen Variablen(Auch in Var-Tokens durchnummerieren und ersetzen)

Der nun vorhandene Code enthält außer den Funktionen nurnoch String-Tokens, Var-Tokens und Zahlen. Damit kann man gut arbeiten.

- Den pregeparsten code und die Vor-Blöcke der Funktionen(Die natürlich mit pregeparst wurden) mit einem 'Block-Generator' durcharbeiten, der den verbleidenden Code nach den Funktionsnamen aus der Liste durchsucht und in Blöcken zusammenfast. Wenn da ein String ist, der in keiner Liste als irgendetwas identifiziert werden kann: Error. Nun kann man noch User-Defined blöcke erstellen(Wie in C/++ blöcke in { und }) oder es lassen. Dann werden nurnoch der inhalt von If/endIf blöcken oder Schleifen in blöcke gepackt.
- Wenn man nun diese Langen listen mit Tokens,Funktionsnamen und Blöcken in denen wieder eben diese Tokens und Funktionen. Diese kann man jetzt durcharbeiten und ausführen.



Zu deinem Problem: Guck halt, ob in den Funktions-Klammern außer einem Token oder eben einer Zahl sonst noch was ist. Kann es dann nach obigem Muster ja nur ne Funktion sein.
Also: Passenden Block ausführen oder, wenns ne statische Funktion ist, diese aufrufen.

So, das war jetzt argst theoretisch und ich kann auch für richtigkeit nicht garantieren, weil ich das mal eben ausm Kopf geschriben habe. Hoffe aber, konnte dir damit helfen.


Ps.: Rechtschriebfehler könnt ihr von mir aus bei Ebay versteigern Wink

Geeecko

BeitragMo, Jun 19, 2006 19:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ds hilft mir enorm viel!
Jetzt habe ich ne Idee wie ich machen kann.
ich habe mi das so vorgestellt:
print(5-4) dann mache ich us dem String noch nen string:
print(1) den verarbeite ih dann ncoh weiter.
ich ´muss mich doch von innen nach ausen arbiten oder?
Soweit bin ich:
Code: [AUSKLAPPEN]

Global var.var,kl.kl

Global S$,funcs

funcs=1

Dim func$(1000)

Type var
   Field wert$
End Type

Type kl
   Field stelle
End Type

func$(1)="Print"




Function SelectFunc(ss$)
   ;Alles löschen
   For kl.kl=each kl
      Delete kl
   Next
   ;Klammern ermitteln
   For i=1 To Len(ss$)
      If Mid(ss$,i,1)="("
         kl.kl=new kl
         kl\stelle=i
      EndIf
   Next
   ;Klammern ermittelt
   ;Funktionen ermitteln
   For i=1 To funcs
      stelle=instr(ss$,func$(i))
      If Not stelle=0
         
      

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group