Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

fb:porticula NoPaste

Info
Info / Hilfe
Liste
Übersicht / Liste
Neu
Datei hochladen
Suche
Quellcode suchen
Download
Dateidownload

für mod

Uploader:MitgliedMB Interactive Labs
Datum/Zeit:07.11.2010 19:53:42

'Ein Beispielcode, wie ein Parser für einen Interpreter aussehen könnte
'Das ist keine Ideallösung und behandelt auch nicht alle Fälle
'Es dient als Anschauungsmaterial wie man so etwas lösen könnte

'Keine Haftung wenn der PC explodiert oder sonstiges ;)


'Definition von TRUE und FALSE
#Ifndef FALSE
    #Define FALSE 0
    #Define TRUE (Not FALSE)
#EndIf

'Benötigte Funktionen - Beschreibung siehe bei der Funktion selbst
Declare Function aufknuepfen (text As String) As String
Declare Function gibText (text As String) As String


'Mainschleife
'Beispielcodezeile
If command$(1) = "" then Print "format is:"

Open command$(1) For Input As #1

Dim As String text

'Zeile vorbereiten
'erst eine datei laden. command übergibt die datei an mein paser
Do
    'input #1, text
    'print text
    'loop until eof(1)
    Input #1, text
    text = aufknuepfen(text)

    'Ersten Textbaustein aufnehmen
    Dim As String aktuellerText
    aktuellerText = gibText(text)


    'Diese Schleife könnte die einzelnen Textbausteine gleich an eine
    'Funktion weitergeben, die diese verarbeitet
    While aktuellerText <> ""
        'hier werden die befehle ausgeführt.
        Print aktuellerText 'zur zeit nur anzeigen

        'Ausfüren der befehle
        Select Case aktuellerText
            Case "QCMM"
                Print "Komentar"
            Case "QCLS"
                Print "Cls"
            Case "QSCR"
                Dim As String para1,para2,para3
                'Nächsten Textbaustein holen
                para1 = gibText(text)
                Print para1 + " Wert1"
                para2 = gibText(text)
                Print para2 + " Wert2"
                para3 = gibText(text)
                Print para3 + " Wert3"
                ScreenRes Val(para1),Val(para2),Val(para3)
            Case "QCOL"
                Print "Farbe setzen"

            Case "QLIN"
                Print "Linie zeichnen"

        End Select
        'Nächsten Textbaustein holen
        aktuellerText = gibText(text)
    Wend
Loop Until Eof(1)
'Vor dem Beenden auf Tastendruck warten, damit man auch was sieht
Sleep
Close #1


'Diese Funktion bereitet den Eingabetext auf, indem es die einzelnen Textbausteine raussucht
'und eindeutig mit Leerzeichen kennzeichnet
Function aufknuepfen (text As String) As String
    Dim As String ausgabe

    'Diese Schleife läuft die Zeichen nacheinander durch
    For i As Integer = 0 To Len(text) - 1

        'Überprüfen um was für ein Zeichen es sich handelt
        Select Case text[i]
            Case 48 To 57, 65 To 90, 97 To 122 'Zahlen und Buchstaben
                'werden direkt angehängt
                ausgabe &= Chr(text[i])

            Case 43, 45, 61 '+ - =
                'werden vom Rest getrennt
                If Not Right(ausgabe, 1) = Chr(32) Then
                    ausgabe &= Chr(32) & Chr(text[i]) & Chr(32)
                Else
                    ausgabe &= Chr(text[i]) & Chr(32)
                EndIf

            Case Else
                'alles andere wird hier der einfacherheitshalber nicht besonders behandelt
                If Not Right(ausgabe, 1) = Chr(32) Then
                    ausgabe &= Chr(32)
                EndIf

        End Select
    Next

    'Am Ende noch ein Leerzeichen anhängen, so spart man sich das suchen nach dem letzten Zeichen
    If Not Right(ausgabe, 1) = Chr(32) Then
        ausgabe &= Chr(32)
    EndIf

    Return ausgabe

End Function


'Diese Funktion nimmt den aufbereiteten Text, gibt den nächsten Textbaustein zurück
'und kürzt den aufereiteten Text, damit der entnommen Textbaustein nicht mehr enthalten ist
Function gibText (text As String) As String
    Dim As String ret

    'Sucht den Text nach dem Trennzeiche (Leerzeichen) ab, kürzt den Text und gibt den Baustein zurück
    For i As Integer = 0 To Len(text) - 1
        Select Case text[i]
            Case 32 'Leerzeichen
                If Not (i = 0) Then
                    text = Right(text, Len(text) - i)
                    Return ret
                EndIf
            Case Else
                ret &= Chr(text[i])
        End Select
    Next
End Function