AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Klatsch und Tratsch Was nervt euch so, während der Programmierung oder so allgemein
Thema durchsuchen
Ansicht
Themen-Optionen

Was nervt euch so, während der Programmierung oder so allgemein

Ein Thema von himitsu · begonnen am 26. Jun 2010 · letzter Beitrag vom 3. Mai 2013
Thema geschlossen
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
903 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Was nervt euch so, während der Programmierung oder so allgemein

  Alt 22. Jun 2012, 10:25
Naja, AND ist nicht nur ein boolscher Operator, sondern auch ein bitweises AND. Und in der Prioritätenliste kommen diese Operatoren vor den Vergleichsoperatoren (was generell sinnvoll ist, wie ich finde).

Aus if a=b and c=d then wird also zuerst ein if a = e = d then , und daraus ein if (Bool) = d then . Und das schmeckt einer typentreuen Sprache wie Delphi nicht so gut (wenn a,b,c,d Integer o.Ä. sind). Daher muss man bei sowas klammern.
Being smart will count for nothing if you don't make the world better. You have to use your smarts to count for something, to serve life, not death.
 
Benutzerbild von Memnarch
Memnarch

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

AW: Was nervt euch so, während der Programmierung oder so allgemein

  Alt 22. Jun 2012, 10:51
Genau, das liegt an der operator-bindung. Vergleichbar wie +- und */
Hab nen MiniCompiler für Pascal ähnlicher syntax geschrieben. Das klammern muss ich genauso machen für Bedingungen.

zusätzlich resultiert die Klammerpflicht aus der sprachdefinition.

a = b

ist eine <relation> und steht (ganz) oben im parser baum. AND steht an selber stelle wie */ und gehört damit zu einem <term>. Grob gesehen baut die strultur wie bei pascal folgendermaßen aufeinander auf:

<relation> ::= <expression> [<relop> <expression>]
<expression> ::= <term> [<addop> <term>]*
<term> ::= <signed factor> [<mulop> factor]*
<signed factor> ::= [<addop>] <factor>
<factor> ::= <integer> | <variable> | (<Relation>)

bereiche in [] sind optional. Mit * gekenzeichnet bedeutet dass der bereich beliebig oft wiederholt werden darf.

Und da stoßen wir schon auf den grund:
Relation erlaubt nur eine Relation-operation und dann ist schluss. Danach erwartet der Parser nichts mehr. Machen wir eine relation in () ergibt sich folgendes:

Der Parser fängt bei der Relation-Ebene an und fällt durch bis unten auf den Factor wo durch | erlaubte möglichkeiten gegeben sind. Und da finden wir dan unsere Relation in klammern wieder.

Da die daraus erstellte struktur(man stelle sich einen baum vor) von unten nach oben resolved wird, wird (<Relation>) priorisiert und erst DANACH gelangen wir weiter oben auf die <term> ebene.

Es ist anzumerken das sich hierbei an Pascal orientiert wird. Wie weit diese struktur mit Delphi oder komplettem Pascal übereinstimmt ist eine andere Frage. Aber die Wurzeln des Grundes lassen sich denke ich so gut erkennen

Quelle:
http://compilers.iecc.com/crenshaw/
http://compilers.iecc.com/crenshaw/tutor6.txt
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
 
Benutzerbild von himitsu
himitsu

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

AW: Was nervt euch so, während der Programmierung oder so allgemein

  Alt 22. Jun 2012, 10:53
gefunden
http://docwiki.embarcadero.com/RADSt...e_%28Delphi%29
Ein Therapeut entspricht 1024 Gigapeut.
 
Benutzerbild von Memnarch
Memnarch

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

AW: Was nervt euch so, während der Programmierung oder so allgemein

  Alt 22. Jun 2012, 11:03
@Himitsu: ah danke, die seite habe ich nicht mehr gefunden
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
 
Thema geschlossen


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:

(?)

LinkBack to this Thread

Erstellt von For Type Datum
Untitled document This thread Refback 7. Nov 2011 09:54

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