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


von Elektro (Gast)


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?

von A. S. (Gast)


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.

von Yalu X. (yalu) (Moderator)


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:

1
int a;
2
double a;


Fehlermeldungen (Zeile 1 folgt Zeile 2):

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

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

: Bearbeitet durch Moderator
von Narrduino (Gast)


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.

von Narrduino (Gast)


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...

von Michael U. (amiga)


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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.