2014-11-07 3 views
1

나는 컴파일 이론에 대한 강의를 시작하고 있으며, 무료 C99 문서에서이 표현을 유도하는 방법을 생각할 수 없다.C 표현식 "4 - 2 - 1"은 어떻게 유도합니까?

두 가지 주요 질문은 다음과 같습니다.

1) 따라야 할 규칙은 몇 개입니까? 가능한 많이?

예를 들어 '4'는 숫자 또는 정수 - 상수 또는 상수에서 멈출 수 있습니다. 상수로 파싱 된 것 같지만 문서에서이 질문에 대한 답을 찾지 못하는 것 같습니다. - 2 - 4 도출하는 방법

2) 규칙에서 1 :

additive-expression: 
    multiplicative-expression 
    additive-expression + multiplicative-expression 
    additive-expression – multiplicative-expression 

을 때문에 나는 간결함을 위하여 포함하지 않는 다른 규칙은 상수 곱셈 표현식입니다.

그렇 유도

(4 - (2 - 1)) 또는 ((4 - 2) - 1)? 나는 그것을 실행할 때 빼기 결과 때문에 후자임을 알지만, C99 문서에 설명 된이 개념은 어디에 있습니까? 이 개념은 얼마나 명명 되었습니까? 왼쪽 또는 오른쪽 문법이 의도 한 것입니까?

참조를 위해 n1256을 사용했습니다.

2의

답변

2

)가 될 수 없다 (4 - (2 - 1))이 규칙 다음

additive-expression: additive-expression - multiplicative-expression 

2 - 1 다음 경우되기를 곱셈 표현 될 것이다, 그 방법을 구문 분석하려고하면 (문법이 명확하지 않은 경우) 실패합니다. (2 - 1)이 곱셈 표현으로 (expression)가 기본 표현이기 때문에 당신이 4 - (2 - 1)처럼 (괄호로 그 해석을 강제 할 수있는 이유입니다.

내가 생각하는 개념은 associativity을 남아 있습니다. 당신은 문법 바로 연관성의 인스턴스를 볼 수 있습니다 경우 1 6.5.16

assignment-expression: unary-expression assignment-operator assignment-expression 

의 예)에 대해, 궁극적으로 전체 파일이 전처리 후 translation-unit 그것에수록, 5.1.1.1 참조 파싱된다. 4을 구문 분석하는 중이라면 구문 어딘가에 들어갈 때까지 멈출 수 없습니다. 당신은 개별적인 캐릭터로 시작하지 않고 그들로 끝납니다.

+0

감사합니다. 내 모든 질문에 답변 해주세요. – pouzzler