상황은 아주 단순한 구문을 작성했지만 컴파일 할 때 충돌이 있습니다. 필자는 왜 이런 간단한 구문으로 인해 충돌이 발생할 수 있는지에 대한 아이디어가 없습니다.yacc에는 시프트/감소 충돌이 있습니다.
%token SCRIPT_ID
%token STRING
%start functions
%%
functions: SCRIPT_ID '(' STRING ')' {printf("script_id is %s", $3);};
%%
그냥 내 파일을 구문 분석하기 위해 yacc을 사용하고 싶습니다. 내 파일에는 script_id ("1232444")와 같은 것들이 있습니다.
나는 yacc 설명서를 검색하고 shift/reduce 충돌에 대해 이야기 할 때 'if와 else'와 같은 예를 들게됩니다. 그리고 나는 왜 prioperity가 지정되지 않은 경우 'if와 else'가 충돌을 갖는지 이해합니다. 그러나 if-else-conflict가 내가 만난 갈등과 무언가 관련이 있는지 나는 모른다.
내 코드에 어떤 문제가 있는지 말해 줄 수 있습니까?
SCRIPT_ID 및 STRING 토큰을 어떻게 정의했는지 보여줄 수 있습니까? – Zuljin
yacc의 자세한 정보 출력에 자세한 정보가 표시 될 수 있습니다. '-v' 옵션으로 문법을 컴파일하십시오. 이것은 정보가있는'y.output' 파일을 생성합니다. –