컴파일러 이론의 관점에서 보면 javac 컴파일러는 x = x+++++y
이라는 형식의 문을 허용하지 않고 x = x+++ ++y
을 수락하는 이유는 무엇입니까?javac이`x = x +++++ y`를 받아들이지 않는 이유는 무엇입니까?
8
A
답변
8
++
는 자바 렉서에 대한 유효한 토큰이기 때문에, x+++ ++y
같이 토큰으로 구문 분석됩니다 문 :
(x)(++)(++)(+)(y)
위를 : x+++++y
반면
(x)(++)(+)()(++)(y)
이 무효로 토큰 화됩니다 ++
연산자는 (x++)
의 결과가 아닌 숫자 변수에만 적용될 수 있기 때문에 잘못된 java입니다. 이러한 유형의 토큰 화는 maximal munch이라는 개념의 좋은 예입니다. JLS section 3.2
에서
은 가능한 가장 긴 번역 결과가 궁극적으로있는 동안 다른 어휘 번역 것 올바른 프로그램을하지 않는 경우에도, 각 단계에서 사용된다.
따라서 입력 문자 a - b는 토큰 화 a, -, -, b가 가능할지라도 문법적으로 올바른 프로그램의 일부가 아닌 a, -, b로 토큰 화됩니다 (§3.5). 문법적으로 올바른 프로그램의 일부.
관련 문제
- 1. 왜이 코드는 'x, y = y, x + y 형식'대신 'x = y; y = x + y '?
- 2. 루비 이상 : x == y && [x, y] .uniq == [x, y]
- 3. "x <= y && x > = y && x! = y"를 사용하여 루프를 무한대로 만드는 방법은 무엇입니까?
- 4. x, y 설정에 따라 선이 그려지지 않는 이유는 무엇입니까?
- 5. 파이썬이 더 효율적입니다; if x! = y : x = y, x = y 또는 x = y
- 6. (X, Y, 시간) 회귀에서 (X, Y) 예측
- 7. [X] [Y]
- 8. 루비의`| x, y |`와`| x; y = 0 | '의 차이점은 무엇입니까?
- 9. 프로그래밍 방식으로 X w/5 (Y || Z)를 "X Y"~ 5 || "X Z"~ 5
- 10. ∀x. (p (x) ⇒∀y.p (y))를 읽는 방법?
- 11. 매직 ++ X + (Y = 된 X) 파이썬
- 12. [x] 대신 operator.itemgetter (x)를 사용해야하는 이유는 무엇입니까?
- 13. x = y와 x = y == 1의 차이점
- 14. (x, y)를 3D 플롯으로 플롯하는 기능
- 15. translate3d (x, y, z)를 사용하여 이동하는 요소의 현재 (x, y, z)를 찾을 수 있습니까?
- 16. URL의 PHP - '&'를 (x & y & z, x 또는 y 또는 z 대신) 추가하는 방법은 무엇입니까?
- 17. Y ~ X와 Y ~ X + 1의 차이점은 무엇입니까?
- 18. [x :: y] 목록의 기능은 무엇입니까?
- 19. Libgdx x, y 좌표를 클릭하십시오.
- 20. 어떻게 Eq typeclass 함수를 구현합니까? x == y = not (x/= y) x/= y = not (x == y)는 작동합니까?
- 21. 자바 매처 그룹 : 차이의 이해 "(: X | Y)"와 "(: X?) | (: Y)"를
- 22. [X가 [예]를] $ 배열 [X] [Y]
- 23. 이미지의 숫자 좌표 (x, y)를 찾습니다.
- 24. phantomJS에서 window.scrollTo (x, y)를 트리거하는 방법
- 25. R 언어 오류 (x, y)를
- 26. jQuery (x == y)가 작동하지 않는 경우
- 27. x ++ 뒤에 x가 증가하지 않는 이유는 무엇입니까?
- 28. 지도 및 (X, Y), (X, Z)와 (Y, Z) 쌍과 관련된 X 작업, Y 또는 Z는
- 29. 델파이에서 개인 선언문을 받아들이지 않는 이유는 무엇입니까?
- 30. 인쇄 페이지 x x in y. NET
고맙습니다. – DSF