프로그래밍언어는 컴퓨터프로그램과 알고리즘을 명확히 기술하기 위한 표기법이며, 또한 문법과 의미가 엄격하게 정의된 인공 언어이다. 이러한 이유 때문에, 프로그래밍언어에는 자연어의 특징아로고 할 수 있는 표현의 자유를 허용하지 않는다.
컴퓨터 프로그램은 컴퓨터에 독립적인 한 단위로 입력되어, 그 컴퓨터시스템의 행동을 지시하기 위해 사용되는 구문들의 집합이다.
알고리즘은 문제를 해결하기 위해, 체계적으로 정의된 규칙이나 지시들의 규정된 집합을 의미한다.
알고리즘은 데이터 또는 자료와 직접적인 관련이 있다.
구문론은 언어에서 언어를 구성하는 글자에 대한 적합한 순서를 정의하는 규칙, 또는 프로그래밍언어의 경우, 프로그램을 구성하는 문자의 적합한 순서를 정의하는 규칙을 의미한다.
구문론과 의미론에 대한 명시적이고 정확한 규칙이 정의되고, 이들 간의 일관성이 만족되는 언어를 의미한다.
프로그래밍언어적 관점에서는 구문이 하나 이상의 문법으로 구성되는 경우를 모호하다고 한다. 이러한 성질은 프로그래밍언어의 일관성을 위배하는 심각한 문제를 발생시킨다. 즉 하나의 문장이나 프로그램이 하나 이상의 다른 결과를 초래할 수 있기 때문이다.
의미론은 형식언어의 생성규칙에 맞게 구촉된 글자 또는 문자들이 어떤 의미 또는 효과가 있는지를 명세하기 위한 언어의 정의 영역이다.
의미론의 목적은 프로그래밍언어 설계자, 구현자 및 사용자에게, 프로그래밍언엉데 대한 명확하고 완전하고 모호하지 않은 의미를 제공하기 위한 것이다.
프로그래밍언어에서 위의 그림에서 보여주는 바와 같이 문법적 정의가 의미적 정의를 만족하는지를 입증하는 것은 매우 중요하다. 즉 문법적인 정의가 의미적인 정의를, 또는 의미적인 정의가 문법적인 정의를 충분히 반영하고 있는지를, 즉 일치하는지를 보장해야만 프로그래밍언어를 믿고 사용할 수 있는다는 것이다.
절차중심언어는 요구한 결과를 얻기 위해 컴퓨터시스템에 의해 수행되어야 하는 절차에 대해 명확한 정의를 제공하는 언어이다. 즉, 프로그램을 통해 주어진 입력에 대해, 어떤 절차를 거쳐서, 어떻게 결과를 얻을 것인지를 명시적으로 지시하지만 그 결과가 어떤 속성과 특성을 만족해야 하는지는 명시하지 않는다. 언어의 또 다른 분류에서는 이러한 언어를 imperative language라고도 한다.
기계언어의 문제점을 해결하기 위해 어셈블리어가 고안되었다. 그러나 어셈블리어에는 여러 문제점이 있다.
이런 문제를 해결하기 위해서 절차중심언어가 고안되었다. 이런 문제를 해결하기 위한 특징은 다음과 같다.
이 책의 원래 목적은 프로그래밍 패러다임에 의해 구분되는 언어들의 공통적인 특성을 유형화해서 보여주는 것이다. 나는 그런 특성은 모두 생략하고 패러다임에 집중한다.