2013-02-21 3 views
3

Java 파서는 모호한 단항 연산자를 어떻게 처리합니까?단항 접두어 연산자의 Java 명확성

예를 들어 int x이 어딘가에 있다고 가정하면 +--x은 완전히 유효한 코드입니다. ---x도 이론적으로는 유효하지만 컴파일러에서 오류가 발생합니다. 마찬가지로 +~~~~~~+--x도 허용되지만 ~~~~~~++--x은 둘 다 유효한 표현식으로 파싱 될 수 있습니다.

내가 알 수있는 한, 문법은 모호하기 때문에 토큰 화 중에 처리해야하지만 설명 할 수있는 항목이 없습니다. 가능 아무 +-(-x)이 없기 때문에 +--x이 모호 -(--x) 또는 --(-x) 또는 -(-(-x)) 동안 의미 할 수 있기 때문에

+0

"궁금한 마음을 알고 싶다"면을 제외하고 - 이것을 알 필요가있는 실용적인 상황을 생각할 수 있습니까? 다른 말로하면 - 이것도 중요합니까? 이런 식으로 우연히 만났습니까? – Floris

+0

@Floris 저는 Java 소스 코드를 출력하는 도구를 만들고 있습니다. 그렇기 때문에 중요합니다. – Antimony

+0

귀하의 의견 중 일부는 "Java 컴파일러가 모호한 단항 연산자를 어떻게 감지합니까?" 내가 맞습니까, 아니면 제가 그 요점을 완전히 놓쳤습니까? – ajmccluskey

답변

3

Stephen P가 암시 하듯이 단항 연산자는 Java에서 오른쪽에서 왼쪽으로 그룹화됩니다. 즉, 다른 연산자가 오른쪽으로 그룹화 할 수 있으므로 이러한 표현식이 모호합니다. 단항 연산자에 대한 규칙은 Section 15.15 of the Java 7 spec을 참조하십시오. 당신이 당신의 자신의 질문에 대답 것 같아 어느 정도

편집

. --- x와 같이 모호한 표현식은 컴파일러가 사용자가 원하는 것을 모르기 때문에 컴파일 오류를 일으키는 것으로 보입니다. 이러한 경우 표현을보다 구체적으로 지정함으로써 모호성을 해결해야하는 것은 프로그래머입니다. 모호성을 제거하기 위해 괄호를 추가합니다.

+0

나는 이미이 섹션을 읽었으므로 질문을한다. 어쨌든 토크 나이저에 문제가있는 것처럼 보였고 그 부분을 설명하는 것을 찾을 수 없었습니다. – Antimony

3

---x이 모호합니다.

+1

'+ (- (- x))'가능합니다. – Antimony