Parsing
Übersicht

![]() |
GeeeckoBetreff: Parsing |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! |
![]() |
derAtomkeksehemals "Sethus" |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
||
![]() |
derAtomkeksehemals "Sethus" |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
gib mal code *g* | ||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
![]() |
Geeecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group