Seite 3 von 3

Verfasst: 27.08.2006 00:16
von MVXA
mach du nur. Ist sowieso nicht meins. Bezweifel aber irgendwo, dass er
damit was anfangen kann :P.

Verfasst: 27.08.2006 11:17
von winduff

Verfasst: 28.08.2006 18:25
von Spirit
winduff hat geschrieben:http://data.eimex.de/Compiler_Bau.pdf

Bitte und viel Spaß :mrgreen:
Dankeschön! Nach so etwas suche ich schon seit langem. :D

Verfasst: 28.08.2006 18:55
von DW
Ich arbeite auch an einer Scriptsprache, oder Interpretierer:
http://www.purebasic.fr/german/viewtopi ... 778#107778

in BB.
Die einzigen Funktionen, die man eigentlich für einen parser braucht, sind :
Schleifen
Entscheidungen
File System
Stringfunktionen


Ich gebe mal ein BEispiel für eine If Entscheidung in BB:

Code: Alles auswählen

For a=1 To Len(lin$)


If Mid(lin$,a,3)="if(" Then
pl.pl=New pl
Repeat
pl\p=pl\p+1
Until Mid(lin$,a+3+pl\p,2)="==" Or Mid(lin$,a+3+pl\p,2)="!=" Or Mid(lin$,a+3+pl\p,2)=">>" Or Mid(lin$,a+3+pl\p,2)="<<" Or Mid(lin$,a+3+pl\p,2)="<=" Or Mid(lin$,a+3+pl\p,2)=">="
op$=Mid(lin$,a+3+pl\p,2)

Repeat
pl\p1=pl\p1+1
Until Mid(lin$,a+3+pl\p+pl\p1,2)="){"





If Mid(lin$,a+3,1)="$" Then
For var.var=Each var
If var\n$=Mid(lin$,a+1+3,pl\p-1) Then value$=var\v$
Next
Else
value$=Mid(lin$,a+3,pl\p)
EndIf



If Mid(lin$,a+3+pl\p+2,1)="$" Then

For var.var=Each var
If var\n$=Mid(lin$,a+3+pl\p+2+1,pl\p1-3) Then value1$=var\v$ 
Next
Else
value1$=Mid(lin$,a+3+pl\p+2,pl\p1-2)
EndIf













If op$="==" Then
If(value$=value1$) Then
Repeat
linif$=ReadLine(file)
For a=1 To Len(linif$)
commands(linif$,num,pname$,filn$)
Next
Until linif$="}" 
Else
Repeat
linif$=ReadLine(file)
Until linif$="}" 
EndIf
ElseIf op$="!="
If(value$<>value1$) Then
Repeat
linif$=ReadLine(file)
For a=1 To Len(linif$)
commands(linif$,num,pname$,filn$)
Next
Until linif$="}" 
Else
Repeat
linif$=ReadLine(file)
Until linif$="}" 
EndIf


ElseIf op$=">>"
If(value$>value1$) Then
Repeat
linif$=ReadLine(file)
For a=1 To Len(linif$)
commands(linif$,num,pname$,filn$)
Next
Until linif$="}" 
Else
Repeat
linif$=ReadLine(file)
Until linif$="}" 
EndIf



ElseIf op$="<<"




If(value$<value1$) Then
Repeat
linif$=ReadLine(file)
For a=1 To Len(linif$)
commands(linif$,num,pname$,filn$)
Next
Until linif$="}" 
Else
Repeat
linif$=ReadLine(file)
Until linif$="}" 
EndIf



ElseIf op$="<="




If(value$<=value1$) Then
Repeat
linif$=ReadLine(file)
For a=1 To Len(linif$)
commands(linif$,num,pname$,filn$)
Next
Until linif$="}" 
Else
Repeat
linif$=ReadLine(file)
Until linif$="}" 
EndIf



ElseIf op$=">="



If(value$>=value1$) Then
Repeat
linif$=ReadLine(file)
For a=1 To Len(linif$)
commands(linif$,num,pname$,filn$)
Next
Until linif$="}" 
Else
Repeat
linif$=ReadLine(file)
Until linif$="}" 
EndIf





EndIf



EndIf
next
Was da passiert? lin$ ist eine Variable, indem ein string mit readline gespeichert ist. Nun, mit dem for next Befehl geh ich jeden Buchstaben der line durch. Wenn nun ein Wort namens "if(" inder line auftaucht, so...und so weiter. Mehr ist da erstmal nicht.