Menü
Avatar von Michael 'mihi' Schierl

75 Beiträge seit 16.12.2004

Re: Ich frage mich immer, wie FORTRAN das macht.

Lochkarte schrieb am 15.02.2019 18:55:

Jetzt kenne FORTRAN keine reservierten Wörter, Leerzeichen haben keine Bedeutung, und Variablem müssen nicht deklariert werden. Schreibt man statt dem Komma einen Punkt, dann wird also der Variablen DO10I der Wert 1.42 zugewiesen. Wie geht der Lexer bei dieser komischen Sprache vor?

Er wird vermutlich erstmal nur in Zeilen splitten (ich kenne FORTRAN nicht würde aber aus der Beschreibung annehmen dass in FORTRAN Zeilenwechsel ähnlich zu BASIC und COBOL relevant sind) und dann für jede Zeile mehrere Variationen durchprobieren müssen.

Das ist keine Spezialität von FORTRAN. C++-Templates sind bekannt dafür, dass sie sehr zeitaufwändig zu parsen sind (ich finde das gerade nicht wieder, aber es kursierte mal ein C++-Vierzeiler, bei dem gcc nach etlichen Stunden Parsingversuchen mit einem Syntaxfehler aufgeben "musste").

Und auch "modernere" Sprachen (Java, C#) haben Zweideutigkeiten, die sich nicht a priori auflösen lassen (auch nicht mit mehreren Lexer States und unlimitiert Lookup):

Sowas wie

g(x<a,b>(c));

kann entweder die Funktion g mit 2 Booleans aufrufen (Ergebnisse von Vergleichen Größer/Kleiner), oder mit einem Parameter (Ergebnis der generischen Funktion x aufgerufen auf c).

Und

(X) -1

kann entweder ein Cast einer negativen Zahl oder eine Subtraktion sein (je nachdem ob X ein Typ oder eine Variable ist).

Bewerten
- +
Anzeige