![]() |
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 |
Re: Lexikalischer Scanner
Hallo,
ich habe mich mal daran versucht: ![]() Vielleicht hilft es dir ja. Ansonsten ist hier einiges, auch leichtverständliches, dazu zu finden: ![]() 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. |
Re: Lexikalischer Scanner
![]() oder JLex das gleiche in Java (vermutlich leichter zu verstehen) |
Re: Lexikalischer Scanner
Schonmal Danke für die schnelle Antwort,
werde mal schauen ob ichs damit hinkrieg. :) MfG Alaitoc |
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? |
Re: Lexikalischer Scanner
Ich denke nicht, dass das den Scanner etwas angeht ;) . Den würde ich
Code:
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).
... PLUS NUM(2) VAR("a") VAR("b")
|
Re: Lexikalischer Scanner
Zitat:
|
Re: Lexikalischer Scanner
Hier gibt es eine Delphiübersetzung von Lex/Yack
![]() 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. |
Re: Lexikalischer Scanner
Zitat:
|
Re: Lexikalischer Scanner
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz