Eigener Parser - If Abfragen
Übersicht

![]() |
BlitzproggerBetreff: Eigener Parser - If Abfragen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie der Titel bereits sagt habe ich bei meinem Projekt einen Parser angefangen, der auch If Abfragen beherrschen soll. Ich wollte dies so lösen:
Ich habe die Programmebene und die Ifebene. Immer ein If kommt, soll die Programmebene um 1 erhöht werden, ist die Abfrage positiv, so wird auch die Ifebene um 1 erhöht. Bei einem Endif wird die Programmebene um 1 gesenkt, ist Die Ifebene grösser als die Programmebene, wird sie angeglichen. Sind die bleiden Ebenen gleich gross, werden die Scripts ausgeführt. Ich hoffe ich konnte das jetzt einigermassen gut erklären. Das ganze funktioniert aber nicht ganz wie ich es möchte. Die Ebenen scheinen nicht richtig erkannt zu werden. Ich finde aber nicht heraus wieso. Wäre froh wenn mir jemand helfen könnte. Der Code: (Var. bedingung = Proggrammebene) Code: [AUSKLAPPEN] If script = 1 And bedingung = if_ebene Then If Instr(rl$,"endif") Then bedingung = bedingung - 1 If bedingung < if_ebene Then if_ebene = bedingung If bedingung < 0 Then RuntimeError ("Es sind in der Datei "+dat$+" Seite "+diav+" Mehr Endifs als Ifs vorhanden.") ElseIf Instr(rl$,"if") And Instr(rl$,"then") Then bedingung = bedingung + 1 tmp2 = 1 z1 = Instr (rl$," ") z3 = Instr (rl$,"then") z2 = Instr (rl$,"<>") : mode = 0 If z2 = 0 Then z2 = Instr (rl$,"<=") : mode = 1 If z2 = 0 Then z2 = Instr (rl$,">=") : mode = 2 If z2 = 0 Then z2 = Instr (rl$,"<<") : mode = 3 If z2 = 0 Then z2 = Instr (rl$,">>") : mode = 4 If z2 = 0 Then z2 = Instr (rl$,"==") : mode = 5 If z2 = 0 Then mode = 6 werte$ (0) = Trim (Mid (rl$,z1+1,z2-z1-1)) werte$ (1) = Trim (Mid (rl$,z2+2,z3-z2-2)) For i = 0 To 1 name$ = Replace (werte$(i),"0","") For ii = 1 To 9 name$ = Replace (name$,Str(ii),"") Next If name$ = "" Then Else found = 0 For v.var = Each var If v\nm$ = werte$ (i) Then found = 1 werte$ (i) = v\wert EndIf Next If found = 0 Then werte$ (i) = "0" EndIf Next If mode < 6 Then Select mode Case 0 If Int(werte$ (0)) <> Int(werte$ (1)) Then if_ebene = if_ebene + 1 Case 1 If Int(werte$ (0)) <= Int(werte$ (1)) Then if_ebene = if_ebene + 1 Case 2 If Int(werte$ (0)) >= Int(werte$ (1)) Then if_ebene = if_ebene + 1 Case 3 If Int(werte$ (0)) < Int(werte$ (1)) Then if_ebene = if_ebene + 1 Case 4 If Int(werte$ (0)) > Int(werte$ (1)) Then if_ebene = if_ebene + 1 Case 5 If Int(werte$ (0)) = Int(werte$ (1)) Then if_ebene = if_ebene + 1 End Select EndIf tmp2 = 1 Endif Endif mfg |
||
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/
Unfreiwilliger Gewinner des BAC# 115. ![]() |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group