일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 객체
- 항해99단점
- 항해99장점
- 객체지향 프로그래밍
- 프로세스
- Thread
- DI
- bean
- class
- process
- 부트캠프추천
- 오브젝트
- 쓰레드
- 인스턴스화
- 인스턴스
- jvm
- 항해99솔직후기
- object
- 스레드
- Instance
- 소셜로그인
- IoC
- API
- 회고록
- jwt
- 클래스
- Dependency Injection
- 소셜
- inversion of control
- social login
- Today
- Total
로운's 기술노트
8장. 프로그래밍 언어 처리 본문
■ 단어에서 문장으로
스티븐 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 : 관련 특정 분야에 최적화된 프로그래밍 언어로 해당 분야 또는 도메인의 개념과 규칙을 사용한다.
[참조]
조너선 스타인하트, 『한 권으로 읽는 컴퓨터 구조와 프로그래밍』, 오현석 옮김, 책만(2021), p331-334.
https://talkingaboutme.tistory.com/entry/Compiler-Shift-Reduce-Parsing
'항해99_'22.01~04 > Computer Science' 카테고리의 다른 글
9장. 웹 브라우저 (0) | 2022.02.21 |
---|---|
7장. 데이터 구조와 처리 (0) | 2022.02.07 |
5장. 컴퓨터 아키텍처와 운영체제 (0) | 2022.01.29 |
2장. 전자 회로의 조합 논리_ 디지털 컴퓨터의 사례 (0) | 2022.01.23 |