mikrocontroller.net

Forum: Compiler & IDEs Warum wird von unten nach oben kompiliert?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Elektro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Mir ist gerade aufgefallen dass die Arduino-IDE anscheinend von unten 
nach oben die Syntax kontrolliert, jedenfalls wird immer die unterste 
Zeile die einen Fehler enthält markiert. Warum ist das so? Hat das einen 
Vorteil oder ist das einfach nur Geschmackssache?

Autor: A. S. (achs)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
Eigentlich macht die erste warnung mehr Sinn.

Für Anfänger könnte der erste Fehler in der letzten Zeile stehen und 
mehr Sinn machen.

Autor: Yalu X. (yalu) (Moderator)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Elektro schrieb:
> Mir ist gerade aufgefallen dass die Arduino-IDE anscheinend von unten
> nach oben die Syntax kontrolliert, jedenfalls wird immer die unterste
> Zeile die einen Fehler enthält markiert.

Ganz klar: Der Compiler verwendet einen so genannten Bottom-Up-Parser
zur Analyse des Quellcodes:

  https://de.wikipedia.org/wiki/Bottom-Up-Parser

Nee, war nur Spaaß :)

Der aktuelle GCC hat einen Top-Down-Parser nach dem Prinzip des
rekursiven Abstiegs. Früher hatte der GCC zwar einen LALR-Parser, und
der arbeitet bottom-up. Das ist aber schon lange her und hat mit der
Reihenfolge der Fehlermeldungen überhaupt nichts zu tun.

> Warum ist das so?

Ist das wirklich so? Hast du ein kleines Beispiel?

in folgendem Beispiel sieht es vielleicht so aus, als würfle der
Compiler die Meldungen durcheinander:

int a;
double a;


Fehlermeldungen (Zeile 1 folgt Zeile 2):

sketch_apr23a:2: error: conflicting declaration 'double a'
 double a;
        ^
sketch_apr23a:1: error: 'a' has a previous declaration as 'int a'
 int a;
     ^

In Wirklichkeit ist aber die zweite keine eigenständige Fehlermeldung,
sondern gibt nur einen zusätzlichen Hinweis zur ersten.

: Bearbeitet durch Moderator
Autor: Narrduino (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht so: die Arduino IDE sucht die Compilermeldungen "von hinten 
her" durch um schneller etwas zu finden was der Anzeige würdig befunden 
wird.

Die richtige Lesereihenfolge der Compilermeldungen sollte aber von oben 
nach unten erfolgen, dabei stösst man "irgendwo in der Mitte aller 
Meldungen" auf den ersten Fehler der der Anzeige würdig ist. Dies ist 
ein klein wenig aufwändiger (nicht schwieriger!) umzusetzen.

Autor: Narrduino (Gast)
Datum:

Bewertung
-4 lesenswert
nicht lesenswert
Achim S. schrieb:
> Eigentlich macht die erste warnung mehr Sinn.
>
> Für Anfänger könnte der erste Fehler in der letzten Zeile stehen und
> mehr Sinn machen.

Arduino ist für Einsteiger zu richtigen Werkzeugen, Anfänger habe da 
nichts verloren...

Autor: Michael U. (amiga)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Hallo,

was er meinen dürfte ist mir auch schon aufgefallen:

int variable = 0;

Im Source hat man jetzt Tippfehler (copy&paste sei Dank):

varible  = 1
...
varible  = 2
...
varible  = 3

Der Compiler bricht mit Fehlermeldung ab und verweist auf die Zeile mit 
dem letzten Auftreten der Variablen.
Korrigiert man jetzt nur diese Stelle bricht er eine weiter höher ab 
usw.
Allerdings habe ich mir über dieses Verhalten bisher keine Gedanken 
gemacht...

Gruß aus Berlin
Michael

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.