본문 바로가기
Book

코딩을 지탱하는 기술

by 주연배 2022. 2. 9.

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