구문 분석

어휘 분석

  • 프로그램에서 사용된 단어를 구별해 냄
  • 토큰 : 어휘 분석을 통해 얻어지는 결과
    • 연산자, 구분자, 식별자, 예약어 등

  • 연산자 : +, -, *, /, = 등

  • 구문자 : ,(콤마), ;(세미콜론), [, ] 등

  • 식별자
    • 변수나 함수 등의 이름을 나타내는 토큰
    • 전통적인 식별자

-예약어
- 프로그래밍 언어 자체에 정의되어 포함된 토큰 (if, for, int 등)
- 식별자와 구문 구조가 같지만 식별자로 사용 못함. 사용자 재정의 불가

구문 분석

  • 유도(derivation)
    • 구문 규칙을 이용하여 주어진 프로그램을 만들어 내는 과정
    • 유도가 가능하면 문법적 오류가 없는 유효한 프로그램임
    • 예 : 수식 1+5*2

파스트리

  • 유도를 트리 형태로 나타낸 것

  • 구조
    • 루트 노드 : 시작 비단말 기호
    • 비단말 노드 : 비단말 기호
    • 단말 노드 : 단말 기호

  • 단말 노드를 왼쪽부터 오른쪽으로 차례로 나열하면 주어진 프로그램이 됨
  • 주어진 표현에 대한 파스 트리가 존재하면 구문에 부합하는 표현임
  • 파스 트리가 존재하지 않으면 오류 있는 표현임
  • 예 : 수식 1+5*

  • 모호한 문법
    • 동일한 표현에 대해 서로 다른 파스트리가 만들어지는 문법
    • 문제점
      • 하나의 프로그램이 서로 다른 결과를 도출할 수 있음
      • 프로그래머의 의도와는 다르게 해석되어 잘못된 결과를 도출할 수 있는 위험을 내포

  • 모호성 제거
    • 의도하지 않은 의미로 해석되지 않도록 모호한 문법을 명확하게 변경
    • 새로운 비단말 기호와 새로운 구문 규칙을 추가하여 변경

  • 대표적인 예
    • 연산자 우선순위
    • 좌결합 연산자
    • 중첩된 if문의 else

Updated: