Dal punto di vista della teoria del compilatore, perché il compilatore javac non accetta una dichiarazione del modulo x = x+++++y
ma accetta x = x+++ ++y
?Perché javac non accetta `x = x +++++ y`?
risposta
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.
- 1. Striatura di ruby: x == y && [x, y] .uniq == [x, y]
- 2. Perché/Quando in Python `x == y` chiama` y .__ eq __ (x) `?
- 3. x-y = x + 1 + ¬y problema
- 4. x, y = getPos() vs. (x, y) = getPos()
- 5. Perché x ++ - + - ++ x legale ma x +++ - +++ x non lo è?
- 6. Numpy, perché `x + = y` produce un risultato diverso da` x = x + y`?
- 7. polimorfismo C++ ((X *) y) -> foo() vs ((X) * y) .foo()
- 8. Combinazioni di tre numeri positivi x, y, z in modo che x + y, x - y, y + z, y - z, x + z e x - z siano quadrati perfetti
- 9. Come rendere infinito il ciclo con "x <= y && x > = y && x! = Y"?
- 10. (x: y) operatore Julia
- 11. Round y = x * x al più vicino
- 12. Differenza tra x | y e y <(x) in bash?
- 13. perché obj = {x, y} funziona in Chrome?
- 14. Coordinate X/Y Regex
- 15. Perché gli argomenti su atan2 Y, X piuttosto che X, Y?
- 16. d3.transition(). Attr ('x', y) non funziona quando d3.attr ('x', y) fa
- 17. bufferedImage.getRGB (x, y) non produce alfa
- 18. Quando si usano i doppi, perché non è (x/(y * z)) lo stesso di (x/y/z)?
- 19. x = y = 1 in Scala?
- 20. Panda semplice X trama Y
- 21. Pagina X di Y problema
- 22. Come utilizzare matrix.preScale (x, y)
- 23. jQuery selettore di attributo: [x = y] o [x = z]
- 24. Perché x ** 3 è più lento di x * x * x?
- 25. map lambda x, y con una costante x
- 26. Compressione `x se x il resto y` dichiarazione in Python
- 27. Impossibile trasmettere una classe "X" a una classe "Y" anche se X estende Y?
- 28. Qual è la differenza tra! (X < y) and x > = y in C++?
- 29. Perché x = x non genera un errore, anche se x è definito
- 30. Come si dice `\ x -> y`?
Buona risposta. Grazie. – DSF