저는 들소를 처음 접했고 문법 분석 구문을 만들려고합니다. 지금 내가 해결할 수없는 변화/감소 confield에 직면하고 있습니다. 이것은 내 문법이다식 문법에서 시프트/감소 충돌 해결
%left "[" "("
%left "+"
%%
expression_list : expression_list "," expression
| expression
| /*empty*/
;
expression : "(" expression ")"
| STRING_LITERAL
| INTEGER_LITERAL
| DOUBLE_LITERAL
| expression "(" expression_list ")" /*function call*/
| expression "[" expression "]" /*index access*/
| expression "+" expression
;
,하지만 변화는/그 두 가지 규칙 "(" expression ")"
및 expression "(" expression_list ")"
과 충돌을 감소에 직면하고있다 :
문법은 다음과 같다. 이 충돌을 어떻게 해결할 수 있습니까?
EDIT : 우선 순위 등반을 사용하여이 문제를 해결할 수는 있지만이 방법은 표현식 문법의 일부에 불과하므로 우선 순위 등반을 사용하여 표현식 문법의 크기가 폭발 할 것이므로 그렇게하지 않으려합니다.
문법 전체에 해당하면 shift-reduce 충돌이 없습니다. 그러나, 나는 이것이 당신의 전체 문법이 아닌가 의심합니다. – rici
와우 나는 지금 정말로 어리 석다. 나는 다른 규칙에 오타가있는 것을 발견했다. – Exagon
그게 바로 "내 코드의 몇 줄"과는 다른 [mcve]를 요구하는 이유이다. [mcve]를 제작하면 문제를 명확히하는 데 도움이되어 문제를 해결할 수 있습니다. – rici