추상 구문 트리

추상 구문 트리는 프로그래밍 언어로 작성된 소스 코드를 추상 구문 구조로 작성된 트리다. 추상적인 구문이기에 모든 정보를 나타내지는 않고 어떤 명령어, 함수, 조건이 쓰이는지 추상적인 정보만 나타낸다.

while b ≠ 0
	if a > b
		a := a − b
	else
		b := b − a
return a

위 같은 코드는 아래와 같은 추상 구문 트리로 작성 된다.
추상 구분트리를 생성하는데는 렉시컬 분석과 신택스 분석이 중요하다.

렉시컬 분석(Lexical Analysis)

코드문자를 정해진 규칙에 따라 토큰으로 만들어 합친다. 이 과정에서 공백, 주석 등은 삭제 되며, 렉시컬 분석기는 소스코드를 글자 단위로 읽는다. 이 때 공백, 연산자 기호, 특수 기호 등을 만나면 해당 단어가 끝났다고 인지하고 하나의 토큰으로 만든다.

신택스 분석(Syntax Analysis)

렉시컬 분석의 결과로 나온 토큰 목록을 트리 구조로 만들고 구조적, 언어적 문제가 있다면 에러를 뱉는다. 불필요한 토큰은 생략하며 결과로 추상 구문 트리가 만들어 진다.

SQL 파서와 AST

MySQL 문서에 보면 SQL 쿼리 역시 AST를 사용해서 쿼리 구조를 추상 구문 트리로 만든다고 한다.

  • 쿼리 실행 순서
    • Bison파서를 구문 분석을 맞치면 추상 구문 트리로 만듦.
    • 추상 구문 트리로 SQL 명령어를 작성.
    • 명령어 실행.

한 줄평 : 컴파일러가 우리가 작성한 코드를 분석할 때 코드구조를 추상 구문 트리로 만든다고 한다.

참고 -
https://ko.wikipedia.org/wiki/%EC%B6%94%EC%83%81_%EA%B5%AC%EB%AC%B8_%ED%8A%B8%EB%A6%AC
https://jake-seo-dev.tistory.com/124
https://dev.mysql.com/doc/dev/mysql-server/latest/CODE_PATH_CREATE_TABLE.html#CREATE_TABLE_PARSER

profile
no-intelli 개발자 입니다. 그래도 intellij는 씁니다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN