내 컴파일러 클래스에 대한 파서 프로젝트가 있습니다. 내가 규칙 중 하나에 대한 감소/감소 충돌을 해결할 수 없습니다.Bison/Yacc 특정 문법 예제의 충돌 감소 감소
이 문법 규칙의 그래픽 표현은 (미안 해요 여기에 이미지를 게시 할 수 없습니다 때문에 정책에 유래하는)이 링크에서 볼 수 있습니다 : 모든 타원 터미널 상징
Graphical representation of the "type" grammar rule
.
이 규칙은 약간 복잡해 보였으므로 좀 더 작은 부분으로 나누려고했습니다. 예를 들어,
type : id_or_int brackets_or_end
;
id_or_int : IDnum
| INTnum
;
brackets_or_end : brackets remainingpartboe
|
;
brackets : LBRACnum RBRACnum brackets
|
;
remainingpartboe: DOTnum type
|
;
주 단자 접미사 NUM로 끝나는 단어 : 다음은 문법을 구성하는 나의 시도 DOTnum. 나머지는 비 터미널입니다.
들소는 다음과 충돌에게 들소 오류가 위의 brackets_or_end 규칙의 두 번째 대안 생산에 언급되어
mj-parser.y: conflicts: 1 reduce/reduce
mj-parser.y:122.18: warning: rule useless in parser due to conflicts:
brackets_or_end: /* empty */
주를보고하고있다.
문법을 작성하는 다른 방법을 제안하여이 충돌을 해결하는 데 도움을주십시오. 그건 그렇고, 나는 바이슨의 자세한 출력물을 살펴 봤지만 많은 도움이되지는 않았다.
감사 -sas
동일한 프로덕션 트리에서 비어있을 수있는 두 개의 비 터미널이 있음에 유의하십시오. 따라서 빈 문자열은 대괄호 또는 대괄호 또는 대괄호로 줄일 수 있습니다. 이것은 작동하지 않습니다. –
당신은 절대적으로 밥입니다. 힌트를 주셔서 감사합니다 : 괄호는 엡실론 감소가 없어야합니다. 이렇게하면 축소 감소 충돌이 제거됩니다. – user3416142