2013-04-15 2 views
0

내가 C로 표현을 구문 분석을위한 YACC 문법을 가지고 다음은 그 중 일부는 조각 것입니다 a (p, q, r)와 전달 된 인수의 수와 유형이 함수 정의에 지정된 수와 유형이 일치하는지 확인하여 식별자 자체에서 Expr으로 줄이십시오.충돌/들소

결국 무슨 일이 발생합니까 p,q,rExpr COMMA Expr 대신 Assignment으로 줄어 듭니다. 이것은 Expr COMMA Expr을 사용하여 만 실행할 수있는 의미 규칙을 실행해야하기 때문에 문제가됩니다. 또한 특정 감소의 경우 중요하므로 규칙 Assignment COMMA Assignment을 제거 할 수 없습니다. 그런 경우 YACC에 하드 코드 할 수있는 방법이 있습니까?

답변

1

문제는 작성된 문법이 모호하다는 것입니다. 여러분이 알았 듯이, 입력 p,q을 구문 분석 할 때 각각 이 Assignment (IDENTIFIER에서 감소)이되는 Expr COMMA Expr으로 구문 분석되거나 Assignment COMMA Assignment으로 분석되어 단일 Expr으로 줄어들 수 있습니다.

원하는 것은 무엇입니까? 언제나 하나 또는 다른 것을 원하면 절대로 원하지 않는 것을 삭제하십시오. 때로는 원하고 때로는 다른 원한다면 어떤 경우에을 알았습니까? 컨텍스트를 기반으로하는 경우 문법을 다르게 리팩토링해야하므로 ExprAssignment을 완전히 독립적으로 만들어 컨텍스트를 구별 할 수 있습니다.

또한 왼쪽 대 오른쪽 재귀 적 모호성이 있습니다. p,q,r을 가지고있을 때 (Expr , Expr) , Expr 또는 Expr , (Expr , Expr)으로 구문 분석 하시겠습니까? 다시 말하지만 당신은 어떤 상황에서 원하는 것을 결정하고 적절하게 설정해야합니다.

+0

크리스에게 답장을 보내 주셔서 감사합니다. 내가 제기 한 요점에 대해 전적으로 동의하지만 문제는 현재 단계에서 제안한 사항 중 하나를 구현할 수 없다는 것입니다. 그래서 저는 다시 묻고 싶습니다. YACC에 백도어가있어 문자의 연속이 보일 때 명시 적으로 말할 수 있습니다. 그래서 규칙을 수행해야합니까? – user2283013