ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프언] #10. Concrete/Abstract Syntax
    2023-2학기/프로그래밍언어 2023. 11. 20. 16:10

    Concrete Syntax

    모든 문자열의 집합 $S$를 생각해보겠습니다. "1123aaaaa5"도 $S$의 원소일 것이고, "let x = 10 in x + 2"도 $S$의 원소일 것이고, 제가 쓰고 있는 이 글도 $S$의 원소일 것입니다.

    어떤 프로그래밍 언어의 Syntax를 정의할 때 보통 $S$의 부분집합 $P$를 정의하는 방식을 사용합니다. 어떤 문자열이 $P$의 원소이면 프로그램인 것이고, $P$의 원소가 아니라면 프로그램이 아닌 것이죠. Syntax의 정의에서 짐작할 수 있듯, 어떤 문자열이 $P$의 원소라는 것을 확인함으로서 이 문자열이 프로그램이라는 사실을 입증해줄 수는 있지만 이 프로그램이 어떤 동작을 하는지는 알 수 없습니다. 이를 Concrete Syntax라 합니다.

     

    Abstract Syntax

    아래와 같은 프로그램이 있다고 생각해봅시다.

    let x = 1 in x + 1

    이 프로그램을 Interpreter(프로그래밍 언어를 실행하는 환경)가 받아들일 때, 이 문자열 그대로를 받아들이지 않습니다. Parser라 불리는 프로그램이 위 프로그램을 아래와 같이 변환해줍니다.

    Let(Var("x"), IntVal(1), Add(Var("x"), IntVal(1)))

    이렇게 Parser는 프로그램을 작은 요소들로 쪼개줍니다. 이 과정을 Parsing이라고 부릅니다. 식으로 써서 복잡해 보이지만, 이를 그림으로 나타내면 아래와 같습니다.

    이렇게 Tree를 통해 Syntax를 표현한 것을 Abstract Syntax Tree, AST라고 합니다. Concrete Syntax와는 다르게 Abstract Syntax를 사용하면 프로그램이 무엇을 의미하는지 더 쉽게 파악할 수 있습니다.

     

    감사합니다.


    이 글은 컴퓨터공학과 학부생이 개인 공부 목적으로 작성한 글이므로, 부정확하거나 틀린 내용이 있을 수 있으니 참고용으로만 봐주시면 좋겠습니다. 레퍼런스 및 글에 대한 기본적인 정보는 이 글을 참고해 주세요.

    '2023-2학기 > 프로그래밍언어' 카테고리의 다른 글

    [프언] #12. Manual Type Annotation  (0) 2023.12.05
    [프언] #11. Type System  (0) 2023.12.04
    [프언] #09. Records & Pointers  (0) 2023.11.20
    [프언] #08. States  (0) 2023.10.19
    [프언] #07. Lexical Scoping of Variables  (0) 2023.10.17
Designed by Tistory.