Warum akzeptiert javac nicht 'x = x +++++ y'?

8

Aus der Perspektive der Compiler-Theorie, warum würde der javac-Compiler keine Anweisung der Form x = x+++++y akzeptieren, sondern x = x+++ ++y akzeptieren?

    
DSF 10.05.2013, 08:11
quelle

1 Antwort

8

Da ++ ein gültiges Token für den Java-Lexer ist, wird die Anweisung x+++ ++y in Token als:

geparst %Vor%

Während x+++++y in den ungültigen Token umgewandelt wird:

%Vor%

Das obige ist ungültiges Java, weil der Operator ++ nur auf Dinge angewendet werden kann, die numerische Variablen sind, was das Ergebnis von (x++) nicht ist. Diese Art der Tokenisierung ist ein großartiges Beispiel für das Konzept, das als maximales Munch bekannt ist.

Aus dem JLS-Abschnitt 3.2

  

Bei jedem Schritt wird die längste mögliche Übersetzung verwendet, auch wenn das Ergebnis letztendlich kein korrektes Programm ergibt, während eine andere lexikalische Übersetzung dies tun würde.

     

Somit werden die Eingabezeichen a - b als a, -, b, die nicht Teil eines grammatikalisch korrekten Programms sind, mit einem Token versehen (§3.5), obwohl die Tokenisierung a, -, -, b Teil sein könnte eines grammatikalisch korrekten Programms.

    
cyon 10.05.2013, 08:59
quelle