Replicated

모호한 문법의 사용과 에러 처리 루틴 본문

학부/오토마타와 컴파일러

모호한 문법의 사용과 에러 처리 루틴

라구넹 2025. 11. 30. 23:56

모호한 문법은 언어의 명세에서 매우 유용함

더 짧고, 더 자연스러운 명세를 제공하고 표현이 간단

 

그런데 모호한 문법을 가지고 파싱표를 작성 시 항상 이동-감축 충돌이나 감축-감축 충돌을 야기

이러한 충돌을 없애는 두가지 방법

1. 동등한 의미를 가지는 모호하지 않은 문법으로 변환

2. 모호한 문법으로 파싱표를 작성한 다음 충돌을 제거

 

충돌을 제거하는 두가지 방법

1. 연산자 우선순위와 결합 법칙

- 이동-감축 충돌의 경우 감축되는 생성 규칙과 입력 기호의 우선 순위를 비교하여 생성 규칙의 우선 순위가 높으면 감축, 아니면 이동을 선택,

- 같은 순서인 경우 결합 법칙을 이용 (좌측 결합 만족 시 감축, 우측 결합 만족 시 이동)

- 감축-감축 충돌은 생성 규칙 우선 순위를 비교하여 우선 순위가 높은 쪽으로 감축

 

2. 현수 else

 


 

에러 검출과 에러 처리

모호한 문법에 대해 LR 파싱표를 구성 및 에러 처리 시,

빈 칸에 대해 에러를 집어넣고 에러 처리 내용을 정하면 됨

 

ex. id + 로 문장이 끝나버리면 에러를 출력하고, 계속 진행 시 id를 강제로 집어넣고 대응하는 상태도 푸시한다