x-----x
viene scandito come (x--) -- -x
, e qui --
viene applicata a un'espressione che non è una variabile. Questo non è permesso.
Il motivo è il seguente. La prima fase di analisi consiste nel tokenizzare il flusso di input: il flusso di input, che consiste di caratteri, è raggruppato in blocchi chiamati token. I token sono stringhe che sono significative per Java, ad es. parole chiave, operatori o identificatori.
Tokenizing è greedy: finché un altro carattere può essere aggiunto al token in modo che sia ancora un token valido, il carattere viene aggiunto. Pertanto, ad esempio forLoop
viene considerato come un identificatore singolo e non come la parola chiave for
seguita dall'identificatore Loop
.
Le stringhe -
e --
sono entrambi token validi in Java. Quindi, quando il tokenizer incontra ---
, legge il primo carattere. Sebbene sappia che -
è un token valido, prima guarda il prossimo carattere e decide che --
è anche un token valido, quindi il primo token restituito sarà --
, non -
.
C'è una differenza tra x --- xe x-- - x. In che modo il compilatore dovrebbe sapere se intendete x - --x o x-- - x? – Stultuske