프로그래밍 언어 클래스에서 나는 연산자 우선 순위와 연관성을 배웠다. 언더 위의 상황에 자유 문법을 사용하여 문맥 자유 문법프로그래밍 언어의 연산자 우선 순위
<expr> -> <expr> + <term> | <term>
<term> -> <term> * <fact> | <fact>
<fact> -> (<expr>) | a
간단하다, 우리가
a+a+(a+a)
내가 생각하는 문장을 만들 수 있습니다, 작업의 순서는 다음과 같이 수행해야합니다 다음과 같이하십시오 : (a + a) -> a + a 다음에 모두 합합니다. 그러나 강의에서 교수는 (a + a) -> a + a와 a + a -> (a + a) 순서가 옳다고 말했습니다. 학생은 공황 상태에 있습니다. 심지어 아래의 문장에서
(a+a)+((a+a))
모두 순서 ((A + A)) -> (A + A) 한 후 플러스 (A + A) -> ((A + A)) 올바른 것입니다. 그는 구문 분석 트리를 만든 다음 어셈블리 언어 으로 변환 했으므로 컴파일러에 따라 순서가 달라집니다.
나는 그의 설명을 이해하지 못한다. 아무도 왜 두 가지 가능한 순서가 있는지 설명 할 수 있습니까 ??
주어진 문법이 모호하다는 점에 유의하십시오. ' + '은 ' * '이어야합니다. –
@MichaelDyck correct. 내 오타 –