3-1 문법이란 ?
프로그래밍 언어에는 여러 가지 규칙이있다.
예를 들면 덧셈 보다는 곱셈이 우선순위가 높다.
1 + 2 * 3 이라면??
2 * 3 이 먼저 계산되는게 규칙중 하나다.
문법이란, 프로그래밍 언어 설계자가 만든 ' 이렇게 쓰면 이런 의미로 해석된다' 라고 정한 규칙이다.
그렇다면 문법이란 무엇을 편하게 하기 위해 만들어졌을까?
조금간단했던 시대의 언어인 FORTH와 LISP 에 대해 조금 다루도록 한다.
연산자 우선순위
1 + 2 * 3 을한다면?
대부분 결과는 7을 예상할것이다. 이는 프로그래밍 설계자가 +보다 *를 우선순위라는 규칙을 정했기 때문이다.
문법은 언어 설계자가 정한 규칙
언어 설계자가 정한 규칙이 바로 문법이다.
문법, 연산자도 언어에 따라 다르다.
3-2 스택 머신과 FORTH
FORTH는 가장 간단한 컴퓨터언어이다. 하지만 문법이 거의 존재하지않는다.
계산 순서
1 2 +
이코드를 실핸한다면 FORTH의 가장 큰 특징은 스택 즉, 값을 쌓아 두는 장소를 사용한다.
소스 코드를 실행하면
우선 1이라는 단어와 만난다. 그리고 스택에 1이라는 값을 담아둔다.
다음 2라는 값을 스택에 담는다
마지막으로 +를 만나면 (스택에서 두개를 꺼내서 그것을 더한 결과를 스택에 담아)
이렇게 명령을 실행해서 1 과 2를 꺼내 더한 결과인 3을 스택에 담는다..
연산 순서를 어떻게 표현할까?
그렇다면 이런 연산에서는
( 1 + 2 ) * 3
1 + (2 * 3) 은 어떻게 구별하는것일까?
( 1 + 2 ) * 3 은
1 2 + 3 |
1 + (2 * 3 ) 은
2 3 * 1 + |
이렇게 사용할수있다.
현재도 살아있는 스택 머신
최근에 와선 FORTH와 같이 스택 기반의 언어를 직접 입력하는 경우는 많이없다
그러나 사실 보이지 않는 곳에서 사용되고 있다.
예를 들어 Java, Pyton, Ruby 등은 스택 머신형의 VM을 사용하고있다.
실제로 Java로 프로그램을 짜면 그 프로그램은 내부적으로 FORTH와 같은 프로그램으로 변환되어 동작하고 있는 것이다.
<수정중>