3장- 문법의 탄생
- 문법은 언어 설계자가 정한 규칙 ✔
언어 설계자가 정한 규칙이 바로 문법이다.
문법은 언어에 따라 다르다.
ex) c언어에서의 0은 거짓을 뜻하고 Ruby에서의 0은 참이다
FORTH - 가장 간단한 컴퓨터 언어
1 2 + 3 *
ㄴ1과 2를 더한 것에 2을 곱한다
2 3 * 1 +
ㄴ 2와 3을 곱한 후 1을 더한다.
1 2 3 * +
ㄴ1과 (2와 3을 곱한 것을) 더한다.
LISP - 하나의 구역을 표현하기 위해 항상 괄호를 사용
(+ 1 2 )
ㄴ1과 2를 더한다.
'더해'라는 명령이 앞에 나옴.
(*(+ 1 2) 3)
ㄴ 1과 2를 더한 후 3을 곱한다.
구문 해석기
구문 해석기(파서, Parser)는 소스 코드를 문자열로 읽어 들여 해석하고, 그것을 구문 트리로 만드는 프로그램이다.
* FORTRAN에서 프로그램이 컴파일될 때도 이 구문 해석기가 소스 코드를 문자열로 읽어 들여 구문 트리로 변환하는 작업을 하고 있다.
Python
>>> import dis
>>> dis.dis(lambda x, y, z: (x+y)* z)
0 LOAD_FAST 0 (x)
3 LOAD_FAST 1 (y)
6 BINARY_ADD
7 LOAD_FAST 2 (z)
10 BIBARY_MULTIPLY
11 RETRUN_VAUL
Python
>>> import ast
>>> ast.dump(ast.parse( "1+ 2") )
Module(
body=[ Expr(
Value=NinOp(
left=Num(n=1)
op=Add(),
right=Num(n=2))
)
]
)
>>> ast. dump(ast,parse( "(1 + 2) * 3"))
Moudle(
body=[Expr(
value=BinOp(
left=Num(n=1)
op=Add(),
right=Num(n=2))
)
]
)
Lisp와 비교하기
Binopop=Mult()는 '곱셈'을 의미하고, LISP의 ' * '에 대응된다.
Binop op=Add()는 '덧셈'을 의미하고 LISP의 ' + '에 대응된다.
Num n=1은 '수치 1'로, 이것은 LISP의 '1'에 대응된다.
오늘은 FORTRAN과 LISP에 대해서 알아보았다.
각각의 문법을 배웠는데 내 입장에선 FORTRAN이 LISP보다 해석하기 더 쉬웠다.
이 책은 1장에서 11장까지 있다.
각 장의 길이가 10쪽~15쪽 가량정도 돼 매일 1장(Chapter)씩 읽기에 좋은 것 같고, 부담도 없을 것 같다.
또한, 각 장마다 새로운 정보를 알 수 있어서 더욱 더 흥미롭다!
'Book' 카테고리의 다른 글
프로그래밍 언어 도감 (0) | 2022.12.04 |
---|