2012-12-03 2 views
2
%token A B C D E F G H 
%% 
x : y H y | z H z 
; 

y : G | t | y B G | y B t 
; 

z : w | z D w 
; 

w : C | t | E z F 
; 

t : A 
; 

t 때문에 축소/축소 충돌이 있습니다. 어떻게 해결할 수 있을까요?어떻게이 Yacc 충돌을 해결할 수 있습니까?

+1

너무 많은 부결 이유를 확실하지 않음 - 페이지의 descriptin 꽤 합리적인 크기의 샘플처럼 보인다 흠집과 질문 ... 문법에 대한 추리가 유용 할 수도 있지만 꼭 필요하지는 않을 수도 있습니다. –

+0

@AlexeiLevenkov 불행하게도 저는 사람들이 무언가를 이해하지 못하면 스팸처럼 보입니다. 나는 Yacc에 대해 전혀 모른다. 그래서 나는 두려운 대답을 할 수 없다. 그러나 질문은 합리적인 것 같다. –

+0

Yacc는 파서 생성기이며 문법을 디자인하고 있습니다. 편지로 문제의 일부를 단순화했습니다. – mausmust

답변

0

기본적으로 y : t와 w : t 사이의 충돌은 y : t를 기준으로 해결됩니다. 다른 방법으로 원한다면 해당 규칙의 순서를 바꾸십시오.

내가 t 규칙을 제거 가지고와 Y를 제거했습니다
%token A B C D E F G H 
%% 
x : y H y | z H z 
; 

w : C | A | E z F 
; 

z : w | z D w 
; 

y : G | A B G | A B A | y B G | y B A 
; 

주 : 확장하여 규칙 : - -이 :

단계 1 : 제거 또는이 같은 중 하나를 확장 할 수 있습니다 t : 규칙

%token A B C D E F G H 
%% 
x : y H y | z H z 
; 

y : G | A | y B G | y B A 
; 

z : w | z D w 
; 

w : C | A | E z F 
; 

2 단계 :

%token A B C D E F G H 
%% 
x : y H y | z H z 
; 

y : G | A | A B G | A B A | y B G | y B A 
; 

z : w | z D w 
; 

w : C | A | E z F 
; 
+0

그 사실, 당신의 대답에 감사드립니다. – mausmust

관련 문제