Autor Beitrag
fanaticox64
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Fr 08.06.07 20:01 
Hallo zusammen,
Ich muss für den informatikkurs einen sogenannten Lexer und/oder Parser für ein While Programm programmieren und hab keinen Plan wie ich da rangehen soll.

Diese Sache ist sehr wichtig, damit ich kein Defizit bekommen, daher wäre ich über irgendwelche Antworten sehr dankbar..

...fanatico

Moderiert von user profile iconChristian S.: Überflüssige Zeilenumbrüche entfernt
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Fr 08.06.07 20:24 
Also nachdem ich mir diesen Wikipedia Artikel durchgelesen hatte, dachte ich mir erstmal "Wow. Was ne Aufgabe. Die Info-Lehrer werden immer verrückter...".

Wie würde ich da rangehn ... Als erstes mal kannst du die Tokens als Array definieren, als Konstante. Darin speicherst du alle Schlüsselwörter, die interpretiert werden müssen.
Dann gehst du in einer Schleife den Text durch und vergleichst die Wörter die du findest mit dem Inhalt des Arrays (Mit pos und copy solltest du dich dabei wahrscheinlich auseinandersetzen.).
Nun speicherst du in einem zweiten, dynamischen Array alle gefundenen Tokens und übergibst diesen Array an den Parser. In diesem zweiten Array wirst du wohl am sinnvollsten nicht mehr Strings, also komplette Schlüsselwörter, sondern nur noch deren Position im konstanten Array als Byte speichern, auf diese Art sparst du dir Speicher und das ganze wird (vermtl.) schneller.

Wenn du immernoch nicht weißt, wie du da rangehen könntest, schau dir mal Martoks Suche in: Delphi-Forum, Delphi-Library BRAINFUCK INTERPRETER an.

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
fanaticox64 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 10.06.07 11:14 
erstmal vielen Dank für deine Bemühungen,
aber kannst du nicht noch einen Schritt weiter gehen oder kennst du
jemanden, der das könnte. Diese Aufgabe kann nicht alzu schwer
sein, aber leider habe ich Null Plan vom Programmieren :( .
Also ich gib dir einfach mal die vorgegebenen Sachen:
"Die While Programmiersprache ist eine Mini-programmiersprache"
T={Var, INC, DEC, WHILE >0, DO, END, ';', '.', '(',')' }
N={WhileProg, StuntSeq, Stunt}
S=While Prog

Regeln: WhileProg-->StuntSeq
StuntSeq -->Stunt/Stunt ';' StuntSeq
Stunt -->INC(VAR) / DEC(var) / WHILE Var>0 DO StuntSeq END

Ein gültiges While Programm
While X>0 DO INC(y); DEC(x) END.

Und dafür muss ich jetzt einem Lexer programmieren.
Ich denke für jemanden, der davon viel Ahnung hat, ist das eine leichte Aufgabe,
für mich leider unschaffbar.
Also wäre wirklich super wenn du oder irgendjemand mir dabei helfen könnte.
Ich würde mich auch irgendwie Erkenntlich zeigen, schickt mir dann per PN
eure email adresse und ich melde mich und würde ein kleines Geschenk verschicken,
da die Sache für mich sehr entscheidend ist, damit ich mein ABI bekomme

fanatic0
Dezipaitor
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 220



BeitragVerfasst: So 10.06.07 11:41 
Würde mich mal interessieren:
Ist der Informatikkurs Pflicht oder hast du ihn freiwillig gewählt?
Corpsman
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 228

KUbuntu 10.4
Lazarus
BeitragVerfasst: So 10.06.07 11:55 
Hi

meinen Tokenizer Müstest du entsprechend Parametrisieren können das er dir dann zumindest mal ne Liste der einzelnen Schlüsselworte gibt. Den Rest wirst du dann hoffentlich schaffen.

_________________
--
Just Try it.
fanaticox64 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 10.06.07 13:44 
Eine Naturwissenschaft ist Pflicht und
da ich in der 11 in Informatik gut war (Taschenrechner, Ampeln programmieren)
hab ich es weiter gewählt, was sich als
Fehler herausstellte.
Corpsman vielen dank, ich werde mir das jetzt mal anschauen
und gucken was ich damit anfangen kann.