AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Parser: Überladene Operatoren

Ein Thema von blablab · begonnen am 1. Mai 2013 · letzter Beitrag vom 4. Mai 2013
Antwort Antwort
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#1

AW: Parser: Überladene Operatoren

  Alt 1. Mai 2013, 23:43
@NamenLozer:

Ich hab mir das auch nochmal überlegt und das klingt wirklich sinnvoll. Denn wie du sagst, auch für den Benutzer ist es wahrscheinlich eher verwirrend wenn ein String-Plus einen höheren Rang hat als ein Int-Plus, denn das +Zeichen ist ja beides mal gleich. Und außerdem erwartet man ja auch, dass ein Operator mit einem höheren Rang eher verwendet wird als einer mit einem niedrigerem Rang. Das bedeutet wenn ich ein Int-Plus und ein Float-Plus definiere und dem Float-Plus einen höheren Rang gebe, dann kann ich das Int-Plus gar nicht mehr verwenden, da automatisch immer das Float-Plus mit impliziter Datentypumwandlung benutzt wird. Es scheint also wirklich sinnvoll zu sein bei gleichen Argumenten (ich hab das argLeft, argRight und argBoth genannt) auch nur gleiche Ränge zu erlauben.

Was ich mir nur noch nicht sicher bin ist, ob ich bei unterschiedlichen Argumenten (argLeft, argRight und argBoth) auch unterschiedliche Ränge verlangen soll. Denn wenn nicht, dann sollte ich wahrscheinlich eine eigene Rangfolge zwischen argLeft, argRight und argBoth festlegen. Wäre das sinnvoll z.B zuerst argRight dann argBoth und dann argLeft zu nehmen? Das entspräche dann der Reihenfolge von links nach rechts: Wenn ich also !5! habe wobei Fakultät und Subfakultät denselben Rang haben, dann würde (!5)! gerechnet werden, da man es wahrscheinlich auch so von links nach rechts lesen würde.
Oder gibt es hier eine andere, sinnvollere Variante?

Wegen links- und rechtsassoziativ: Ich mach vorerst alles linksassoziativ. Ob ich das nur wegen den blöden Potenzen noch einführe, muss ich mir dann später nochmal überlegen...
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Parser: Überladene Operatoren

  Alt 2. Mai 2013, 00:58
Also Wolfram Alpha klammert so: !4!4!!4! = !(4!) * 4!! * 4!

Fakultät hat also höhere Priorität als Subfakultät.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#3

AW: Parser: Überladene Operatoren

  Alt 2. Mai 2013, 06:27
Also, für eine Parser ist das doch sehr einfach:
Code:
<Term><Op><Term>
<Term> ::= <OptionalSign><Term> | <Constant>
Ergo ist das 1. '-' ein Operator und alles was danach folgt, ein Vorzeichen. Der Tokenizer liefert eh nur 'OpMinus' und weiß nicht (und ist ihm auch egal), ob es sich um ein Vorzeichen oder einen Operator handelt.

Anders als bei '--' und '++' Operatoren, da macht der Tokenizer ein Lookahead, weswegen 'a---b' funktioniert (und kompiliert), aber 'a----b' nicht (Syntaxfehler).

Zurück zum Thema: Definiere deine Sprache einfach so, wie Du es gerne hättest, denn ein Parser -richtig programmiert- setzt nur die Grammatik um. Verwende keine eigenen Gedanken, dann hast Du auch keine Probleme mit dem Teil.
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: Parser: Überladene Operatoren

  Alt 2. Mai 2013, 08:34
@Furtbichler:
aber das funktioniert z.B dafür nicht: 1!+2

Edit:
Dank NamenLozer hab ich momentan gar keine offene Frage mehr.
Dadurch, dass ich überladene Operatoren mit gleichen Argumentpositionen aber unterschiedlichen Prioritäten nicht mehr zulasse, hat sich die Problemstellung komplett geändert. Ich muss es jetzt erst einmal ausprobieren...

Geändert von blablab ( 2. Mai 2013 um 09:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#5

AW: Parser: Überladene Operatoren

  Alt 2. Mai 2013, 13:55
In erster Linie eher nen Parserproblem oder nicht?
Namenloozer hat das schon gut erklärt.

Um an meinem Compiler zu arbeiten habe ich folgendes durchgelesen:
http://compilers.iecc.com/crenshaw/

vielleicht ganz informativ
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: Parser: Überladene Operatoren

  Alt 4. Mai 2013, 09:52
Vielen Dank für eure Antworten!
So wie es aussieht war die zusätzliche Einschränkung alles was ich brauchte, also danke NamenLozer!
Und Respekt dafür, dass ihr durch meine verwirrende Texte durchgestiegen seid
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:19 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