Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Lexikalischer Scanner (https://www.delphipraxis.net/123136-lexikalischer-scanner.html)

Alaitoc 28. Okt 2008 10:39


Lexikalischer Scanner
 
Hallo zusammen,

ich will nen Parser selbst programmieren, jedoch habe ich bisher kein Codebeispiel für einen
Lexer gefunden. Ich kann mir zwar vorstellen wie er in etwa funktioniert, jedoch wäre ein
Codebeispiel überaus praktisch um einen Anfang zu haben.
Vll. hat da ja wer was? :wink:

MfG Alaitoc

guidok 28. Okt 2008 11:04

Re: Lexikalischer Scanner
 
Hallo,

ich habe mich mal daran versucht:

http://www.delphipraxis.net/internal...ighlight=lexer

Vielleicht hilft es dir ja.

Ansonsten ist hier einiges, auch leichtverständliches, dazu zu finden:

http://www.u-helmich.de/

Daran habe ich mich einigermaßen angelehnt, was den Lexer betrifft. Mit den weiteren Schritten, wie Parser usw. habe ich mich nicht mehr näher beschäftigt, weil ich nicht mehr so viel Freizeit hatte.

Gandalfus 28. Okt 2008 11:29

Re: Lexikalischer Scanner
 
http://flex.sourceforge.net/ leider in c
oder JLex das gleiche in Java (vermutlich leichter zu verstehen)

Alaitoc 28. Okt 2008 12:16

Re: Lexikalischer Scanner
 
Schonmal Danke für die schnelle Antwort,
werde mal schauen ob ichs damit hinkrieg. :)

MfG Alaitoc

Alaitoc 29. Okt 2008 08:56

Re: Lexikalischer Scanner
 
So hab den Scanner grundlegend hinbekommen, jedoch wie genau soll ich das scannen?

2x+3+3-4+2ab

bedeutet ja eigentlich:

2*x+3+3-4+2*a*b

Wie sage ich dem Scanner am Besten wie ich die * hinzufügen soll?

Khabarakh 29. Okt 2008 12:54

Re: Lexikalischer Scanner
 
Ich denke nicht, dass das den Scanner etwas angeht ;) . Den würde ich
Code:
... PLUS NUM(2) VAR("a") VAR("b")
zurückliefern lassen, um die versteckte Multiplikation soll sich der Parser kümmern. (Hab mal angenommen, dass Variablennamen nur aus einem Zeichen bestehen dürfen).

guidok 30. Okt 2008 06:41

Re: Lexikalischer Scanner
 
Zitat:

Zitat von Alaitoc
So hab den Scanner grundlegend hinbekommen, jedoch wie genau soll ich das scannen?

2x+3+3-4+2ab

bedeutet ja eigentlich:

2*x+3+3-4+2*a*b

Wie sage ich dem Scanner am Besten wie ich die * hinzufügen soll?

Kommt drauf an, was das werden soll. Bei einer Programmier- oder Scriptsprache würde ich die vollständige Schreibweise (mit *) zwingend erwarten. Alles andere ist ein fehlerhafter Ausdruck. Für eine mathematischen Parser, hmm, vielleicht nicht.

HERMES 31. Okt 2008 09:47

Re: Lexikalischer Scanner
 
Hier gibt es eine Delphiübersetzung von Lex/Yack

http://delphiwiki.de/wiki/index.php?title=SRLexYacc

Bei Ausdrücken wie 2ab hast du das Problem, dass er nicht eindeutig ist, es sein denn du lässt nur einstellige Variblennamen zu. In dem Beispiel könntest du die Variablen a, b, ab haben und falls Variablen auch mit Zahlen beginnen dürften auch noch 2ab.

Wenn du das an Parser deligieren willst, musst du aber wissen, dass es sich um mehrere Tokens handelt und das geht in dem fall nur mit einstelligen Tokens und somit auch nur mit einstelligen Bezeichnern. Damit ist auch eine Verwendung von "++" beispielsweise ausgeschlossen.

Khabarakh 31. Okt 2008 10:51

Re: Lexikalischer Scanner
 
Zitat:

Zitat von HERMES
Wenn du das an Parser deligieren willst, musst du aber wissen, dass es sich um mehrere Tokens handelt und das geht in dem fall nur mit einstelligen Tokens und somit auch nur mit einstelligen Bezeichnern. Damit ist auch eine Verwendung von "++" beispielsweise ausgeschlossen.

Hm? Wenn ich Variablen auf ein Zeichen beschränke, hat das doch keinen Einfluss auf den restlichen Lexer.

guidok 31. Okt 2008 11:45

Re: Lexikalischer Scanner
 
Zitat:

Zitat von Khabarakh
Hm? Wenn ich Variablen auf ein Zeichen beschränke, hat das doch keinen Einfluss auf den restlichen Lexer.

Stimmt. Wenn du als Vorgabe jedoch nur einstellige Variablen, die dann aus einem Buchstaben bestehen müssen (Zahlen fallen aus, weil die du ja auch mehrstellig benötigen wirst und die meisten Sonderzeichen fallen aus, weil du die evtl. als Operator brauchst), dann kannst du maximal 26 verschiedene Variablen haben. Mehr Buchstaben hat das Alphabet nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:41 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz