2016-09-14 3 views
0

나는 다음과 같은 EBNF 식의 문법이 있습니다운영자 연관성

나는 문법은 그 운영을 위해 특정 연관성을 적용, 또는 파서 코드에서 구현 될 그 한 것인지 여부를 결정해야 할
<expr> -> <term> { (+|-) <term> } 
<term> -> <factor> { (*|/|%) <factor> } 
<factor> -> <pow> { ** <pow> } 
<pow>  -> (<expr>) | <id> 
<id>  -> A | B | C 

. 지금까지 읽은 것에서는 그렇게 보이지 않지만 연관성을 일으키는 원인을 이해하는 데 어려움을 겪고 있습니다. 모든 도움이 크게 도움이 될 것입니다!

답변

0

이 절단 된 표준 변환은 LL 문법이 왼쪽 연관 연산자를 처리 할 수 ​​없기 때문에 식 문법을 하향식 (LL) 문법으로 구문 분석 할 수있는 형식으로 변환하여 결합 정보를 이미 제거했습니다. 결과적으로, 구문 분석 트리는 LL 문법에 의해 유발되어 모든 쌍방향 연산자를 오른쪽 연관으로 만든다. 그러나 일반적으로 의미 작업에서 너무 많은 문제없이 연산자를 다시 연결할 수 있습니다.

그렇기 때문에 곱셈과 지수 연산은 비슷한 문법을 ​​사용하는 것처럼 보입니다. 일반적으로 지수 연산은 오른쪽 연관이며 다른 2 진 연산자는 왼쪽 연관입니다. LR 문법에서

,이 명백 할 것이다 : 상기 문법

<expr> -> <term> | <expr> + <term> | <expr> - <term> 
<term> -> <factor> | <term> * <factor> | <term>/<factor> | <term> % <factor> 
<factor> -> <pow> | <pow> ** <factor> 
<pow> -> (<expr>) | <id> 
<id>  -> A | B | C 

운영자는 왼쪽 연관되어 제조가 좌측 순환되는 경우 (오퍼레이터 만의 일부로서 발생할 수 있으므로 연산자 왼쪽의 비 터미널). 비슷하게, 올바른 연관 연산자는 같은 이유로 오른쪽 재귀 규칙을 가지고있다.