2013-05-10 23 views

risposta

8

Perché ++ è un token valido per il lexer java, la dichiarazione x+++ ++y sarà analizzata in token come:

(x)(++)(+)()(++)(y) 

Mentre x+++++y saranno token nel non valida:

(x)(++)(++)(+)(y) 

È possibile che questo java non valido perché l'operatore ++ può essere applicato solo a oggetti che sono variabili numeriche, il cui risultato è (x++) no. Questo tipo di tokenizzazione è un ottimo esempio del concetto noto come maximal munch.

Dal JLS section 3.2

La definizione più lungo possibile è utilizzato ad ogni passo, anche se il risultato non definitiva fa un programma corretto mentre un'altra traduzione lessicale sarebbe.

Quindi, i caratteri di input a - b sono tokenizzati (§3.5) come a, -, b, che non fa parte di alcun programma grammaticalmente corretto, anche se la tokenizzazione a, -, -, b potrebbe essere parte di un programma grammaticalmente corretto.

+0

Buona risposta. Grazie. – DSF

Problemi correlati