로운's 기술노트

8장. 프로그래밍 언어 처리 본문

항해99_'22.01~04/Computer Science

8장. 프로그래밍 언어 처리

로운's 2022. 2. 13. 21:11

■ 단어에서 문장으로

  스티븐 C 존슨은 1970년대 초반 벨 연구소에서 yacc이라는 프로그램을 작성했다.

yacc가 만들어내는 프로그램은 스택을 사용하는 시프트-리듀스(shift-reduce) 파서(parser)다. 여기에서 시프트는 토큰을 스택에 넣는다는 뜻이고, 리듀스는 스택의 맨 위부터 매치된 토큰들을 다른 어떤 것으로 대치한다는 뜻이다. 

 

 

ㅇ 예시) shift-reduce parser

1) 오른쪽 상단에 보시는 것과 같이 문법이 정의 되어있고, 하단의 값을 빨간색 입력값으로 넣고자 한다.

 

2) 가장 먼저 shift에 의해서 num값이 stack으로 이동한다.

 

3) reduce할 수 있는 EXPR로 치환되어 입력한다.

 

4) 같은 방법으로 stack에는 * 연산자가 OP로 치환되어 들어갑니다.

 

5) 괄호는 일단 그대로 옮겨주고 num, +, num을 각각 EXPR, OP, EXPR로 치환한다.

 

6) 이어서 EXPR OP EXPR은 EXPR로 치환한다

 

7) 하단의 값이 없더라도 parsing이 완전히 끝난 것은 아니며 stack에 올라온 값도 동일한 방법으로 EXPR로 치환한다.

 

최종) 아래와 같은 결과가 도출된다.

 

Parse Tree)

 

 

■ 누구나 프로그래밍 언어를 만들 수 있는 시대

과거에는 프로그래밍 언어를 만들기 어려웠으나, 이제는 수 많은 언어가 존재한다. 현재의 프로그래밍 언어들은 설계자의 취향을 드러낼 뿐이다.

 

- 언어 응용에 대한 이해는 *도메인 특화 언어(DSL)이나 pic, chem 같이 작은 언어를 참조

* DSL : 관련 특정 분야에 최적화된 프로그래밍 언어로 해당 분야 또는 도메인의 개념과 규칙을 사용한다.

 

도메인 특화 언어 'DSL', 어떤 특징 있을까? - 코딩월드뉴스

여러 문제를 광범위하게 해결하기 위해 고안된 프로그래밍 언어가 있다. 바로 범용 언어인데, C , 자바와 언어가 바로 여기에 해당한다. 이에 반대되는 개념을 DSL(Domain-Specific Languages), 즉 '도메인

www.codingworldnews.com

 

[참조]

조너선 스타인하트, 『한 권으로 읽는 컴퓨터 구조와 프로그래밍』, 오현석 옮김, 책만(2021), p331-334.

https://talkingaboutme.tistory.com/entry/Compiler-Shift-Reduce-Parsing

Comments