현재 C- 용 컴파일러를 작성 중입니다. 나는 현재 파서를 만들고 있는데, 어떤 이유로, (단말 ID의) 초기 설정 충돌을 EXPRESSION 생산에서 해결할 수 없다. 아래에, 내가 가지고있는 문법의 하위 집합인가, 누군가가 충돌을 해결하는 방법 (또는 동등한 LL (1) 구문 분석 가능한 문법으로 변환하는 방법)에 관해 올바른 방향으로 나를 가리킬 수 있습니까?C- 문법을 LL (1)로 변환
EXPRESSION -> id VAR eq EXPRESSION | SIMPLEEXPRESSION
VAR -> lbracket EXPRESSION rbracket | empty
SIMPLEEXPRESSION -> ADDITIVEEXPRESSION FADDITIVEEXPRESSION
FADDITIVEEXPRESSION -> RELOP ADDITIVEEXPRESSION | empty
RELOP -> ltoreq | lt | gt | gtoreq | doubleeq | noteq
ADDITIVEEXPRESSION -> TERM ADDITIVEEXPRESSION1
ADDITIVEEXPRESSION1 -> ADDOP TERM ADDITIVEEXPRESSION1 | empty
ADDOP -> plus | minus
TERM -> FACTOR TERM1
TERM1 -> MULOP FACTOR TERM1 | empty
MULOP -> times | divide
FACTOR -> lparen EXPRESSION rparen | id FACTOR1 | num
FACTOR1 -> a | b
(하위) 문법의 모양을 유지하고 문제를 보존하는 방식으로 최대한 많이 삭제하십시오. (첫 걸음, 나머지 문법을 버리고 우리에게 보여준 것에 집중하십시오.) 문제를 해결하지 않고 다른 것을 삭제할 수 없으면 남은 것을 보아라. 종종 문제를 피하기 위해 나머지 문법을 변경하는 방법을 볼 수 있습니다. 그런 다음 다시 모든 것을 추가하십시오. 그 시점에서 문제를 파악할 수 없다면, 질문의 연장으로 문법을 제거하고 문제가 무엇인지 생각해보십시오. 더 많은 조언을 얻을 수 있습니다. –