2013-05-10 9 views

Odpowiedz

8

Ponieważ ++ to ważny znak dla lexer java, oświadczenie x+++ ++y będzie analizowany na tokeny jak:

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

Zważywszy x+++++y będą tokenized w nieprawidłowy:

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

Powyższy jest niepoprawny java, ponieważ operator ++ może być stosowany tylko do rzeczy, które są zmiennymi numerycznymi, co nie jest wynikiem wyniku (x++). Ten rodzaj tokenizacji jest doskonałym przykładem koncepcji znanej jako maximal munch.

Z JLS section 3.2

Najdłuższy możliwy tłumaczenie jest stosowany na każdym kroku, nawet jeśli wynik nie jest ostatecznie złożyć odpowiedni program, podczas gdy inny tłumaczenie leksykalny będzie.

Zatem znaki wejściowe a - b są tokenizowane (§ 3.5) jako a, -, b, które nie jest częścią żadnego gramatycznie poprawnego programu, nawet jeśli tokenizacja a, -, -, b może być część gramatycznie poprawnego programu.

+0

Dobra odpowiedź. Dziękuję Ci. – DSF