AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Parser: Operatoren

Ein Thema von blablab · begonnen am 13. Apr 2012 · letzter Beitrag vom 16. Apr 2012
Antwort Antwort
Benutzerbild von Memnarch
Memnarch

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

AW: Parser: Operatoren

  Alt 16. Apr 2012, 10:30
In meinem Compiler habe ich rekursives parsen eingebaut. Undzwar wie folgt:

(von oberer zu unterer schicht, niedrigstes level bindet am stärksten):

releation := expression (relop Expression)
expression := Term (+- Term)*
term := factor (*/ Factor)*
factor := Var|Constant|Function call| '(' relation ')'

wenn ich bei Factor vor meinem wert ein '-' finde, weiß ich es ist ein vorzeichen. Die funktionen liefern übrigens bei mir einen Datentyp zurück. So kann ich ich typensicherheit verfolgen


edit @idefix: ich glaib dieses operator gewurschtel ist von delphi erlaubt, finde ich perönlich nicht so schön
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.386 Beiträge
 
Delphi 12 Athens
 
#2

AW: Parser: Operatoren

  Alt 16. Apr 2012, 10:54
edit @idefix: ich glaib dieses operator gewurschtel ist von delphi erlaubt, finde ich perönlich nicht so schön
Meinst du das 1+-+-+-+-+-2 ?

Wenn man klammern setzt, dann läßt sich erkennen, daß es damit eigentlich keine Probleme geben sollte.
1+(-(+(-(+(-(+(-(+(-2)))))))))



Man könnte aber auch einfach die Plus/Minus zählen und entsprechend handeln.
So mach ich das in meinem Billigparser.

Das erste Plus Der erste Operator ist die Rechenoperator
und die +/- danach sind das Vorzeichen.
* alle Plus (Vorzeichen) werden stur ignoriert (da eh ohne Wirkung)
* die Minus werden gezählt ... bei einer ungeraden Anzahl ist es ein "-" und bei einer geraden Anzahl ein ignorierbares "+".

1+(-+-+-+-+-2) ergibt dann ein 1+(-- -- -2) , also 1+(-2)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (16. Apr 2012 um 11:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

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

AW: Parser: Operatoren

  Alt 16. Apr 2012, 11:27
1+(-+-+-+-+-2) ergibt dann ein 1+(-- -- -2) , also 1+(-2)
Also ein  1-2
Ja die operatoren schlange macht vielleicht 'sinn' aber sie ist extrem hässlich und zum glück vernab jeglicher praktischer verwendung.
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Namenloser

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

AW: Parser: Operatoren

  Alt 16. Apr 2012, 12:35
edit @idefix: ich glaib dieses operator gewurschtel ist von delphi erlaubt, finde ich perönlich nicht so schön
Meinst du das 1+-+-+-+-+-2 ?

Wenn man klammern setzt, dann läßt sich erkennen, daß es damit eigentlich keine Probleme geben sollte.
1+(-(+(-(+(-(+(-(+(-2)))))))))
Das Problem ist aber, dass die Klammern nicht da sind. In der Mathematik ist nur die Schreibweise mit Klammern erlaubt, nicht ohne. Genau so ist z.B. 5*-2 auch nicht erlaubt, sondern es muss 5*(-2) heißen. Ich habe es mir auch nicht ausgedacht, aber es ist nun mal so festgelegt. Wenn du das in der Schule so schreibst, wird dir das als Fehler angestrichen.

Bei Computern ist das in der Regel anders, aber das liegt daran, dass Informatiker halt manchmal ihre eigenen Regeln und Konventionen aufstellen und sich nicht an die aus der Mathematik halten. Z.B. ist ja auch der Ursprung des Koordinatensystems beim Computer meist links oben, während er sich in der Mathematik normalerweise links unten befindet.

Ich kann mir auch vorstellen, das Codegeneratoren viel komplexer sein müssten, wären redundante Vorzeichen nicht erlaubt.
Genau das wird wohl der Grund sein. Es hätte einfach keinen Vorteil, eine Aneinanderreihung von Vorzeichen zu verbieten, sondern würde nur den Code komplizierter machen. Aber deshalb ist es in der Mathematik noch lange nicht erlaubt...

Geändert von Namenloser (16. Apr 2012 um 12:38 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:23 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