2015-01-18 4 views
0

질문이 필요한 사이트인지 잘 모릅니다. 그러나 우리는 문법의 모호성에 대해 연구하고 있습니다. 가장 왼쪽의 파생과 가장 오른쪽의 파생을 포함합니다. 내 연습 문제는 다음과 같습니다.모호한 문법이 확실하지 않습니다.

E -> E * E | E + E | N 
N -> 0N | 1N | 
Output: 0110 + 110 * 01111 

모호한 방법이 있습니까? 문법을 모호하게 만드는 데 유용한 정보가 있습니까?

답변

1

귀하의 문법을 감안할 때 분명히 모호합니다. 여기서는 연산자 +과 연산자 * 사이를 정의하지 않습니다.

당신은 당신이 0110 + 110 * 01111을 분석해야하는 경우,이 두 가지 방법을 사용하여 수행 할 수 있습니다, 말했듯이 -

  1. 0110 + 110 * 01,111 ----> (0110 + 110) * 01111

    이 조작 우선 순위를 정의하지 않는
  2. 0110 + 110 * 01111 ----> 0,110 + (01,111 * 110)

그래서,이 문법은 매우 애매하다. 또한 연산자 결합성에 대한 규정도 없습니다.

분명히 충돌하는 사례 사이의 구별을 지정하여 모호성을 제거하기 위해 문법에 의해 지정된 생산 규칙에 의존합니다. 하향식 구문 분석을 수행하는 동안 사물에 발생하는 일부 작업은 인수 분해되고 왼쪽 재귀가 모호한 문법으로 이어집니다.

규칙을 지정하기에 너무 광범위하므로 elimination of left recursion 및 기타 관련 자습서를보아야합니다.

+0

이 문법을 사용하고 있습니다. 'E -> E * E | E + E | 0E | 1E'는 내가 한 줄로 만들려고하기 때문에. 또는 한 줄로 만들 수 있습니까? – Yodism

+0

아니요, 'E-> E';와 같이 다른 비 터미널 E '를 사용하여이를 모호하게하고 해결하려고 노력해야합니다. –

+0

그래서 한 줄의 문법으로는 불가능합니다. – Yodism

관련 문제