[PL] Syntax and Semantics
👑 Programming Language
프로그램을 작성하기 위한 프로그래밍 언어는 컴퓨터와 소통하기 위한 일종의 프로토콜이라고
할 수 있다. 태초의 프로그래밍 언어인 기계어부터 어셈블리어, C, C++, Java, Python, OCaml
등의 언어들은 모두 각자의 구문구조(Syntax) 와 의미(Semantics) 를 가진다. 이로 인해
언어마다 다른 특성 및 표현력을 가지며, 각자의 장단점을 가지게 되는 것이다.
예를들어 C 는 프로그램 성능에 초점을 맞추어 시스템 프로그래밍에 적합한 언어인 반면에
OCaml은 프로그램 안정성에 초점을 맞추어 어플리케이션 프로그래밍에 적합한 언어이다.
👑 Compiler & Interpreter
컴퓨터는 프로그래밍 언어을 있는 그대로 해석하지 못한다. 즉 Hight-level 언어를 기계어로
변환해주어야 한다. 이때, 사용할 수 있는 방법으로 Compiler 와 Interpreter가 있다.
💡 컴파일러(Compiler)
컴파일이란 고수준 언어를 실행 프로그램으로 만들기 위해 저수준 언어로 번역하는 행위이다.
컴파일러 (Compiler)에 의해 수행되며 입력된 프로그램에 대해 컴파일러는 다양한
안정성 검증 과정과 다양한 최적화를 수행한다.
-
큰 규모의 소프트웨어, 고성능 소프트웨어, 시스템 소프트웨어 개발에 적합하다.
- 안정성 검증과 다양한 최적화를 통한 성능 향상이 장점이다.
-
주로
static-typed language이다.- 컴파일 시점에 모든 변수와 표현식의 타입이 결정된다.
- 컴파일 시점에 타입 검사를 하므로,
안전한 프로그래밍이 가능하다.
-
몇몇 언어는
타입 추론(type inference)을 제공한다.- 타입 시스템이 프로그램을 분석하여 자동으로 변수 및 표현식의 타입을 추론한다.
let x = 3 in let y = "hello world" in --------------------------------- let x : int = 3 in let y : string = "hello world" in (* 아래의 경우처럼 명시적 표현도 가능 *) -
Compiled Languages 예시
- C/C++ →
gcc or clang→ binary - OCaml →
ocamlc→ binary
- Java → javac → JVML
- Scala → scalac → JVML
- C# → mcs → MSIL
- F# → fsc → MSIL
- C/C++ →
💡 인터프리터(Interpreter)
프로그래밍 언어로 작성된 프로그램을 해석하여 실행하는 행위
인터프리터 (Interpreter)에 의해 수행되며 프로그램을 입력으로 받아
실행 후 결과를 반환하고, 실행구문에 대한 간단한 검증만을 수행한다.
-
별도의 번역과 최적화없이 프로그래밍 언어를 바로 해석한다.
- 하지만, 현대에 들어 많은 인터프리터가
JIT 최적화를 수행하고 있다.
- 하지만, 현대에 들어 많은 인터프리터가
-
높은 자유도를 활용한 소프트웨어 프로토타이핑, cross-platform 소프트웨어 개발 등에 적합하다.
- 다양한 동적 특성을 활용할 수 있다.
- 동일 프로그램이 각 platform 별로 구현된 interpreter를 통해 실행 가능하다.
-
주로
dynamic-typed language이다.- 실행중에 변수 및 표현식의 타입이 변화한다.
- 동일 변수에 여러가지 다른 타입의 값을 저장 가능하다.
- 동일한 표현식이 여러 타입에 대해 다른 동작을 수행한다.
- 위 특성을 통해 개발자에게 높은 자유도를 제공한다.
var x = 3; var y = 'c'; x = 10; y = "Hello"; // 다른 타입의 값을 저장해도 문제 없다.
-
Script 언어들이 해당한다.
- JavaScript, SQL, Python, Ruby 등등
👑 Syntax & Semantics
프로그래밍 언어는 구문구조(syntax)와 의미(semantics)로 구성된다.
따라서 프로그래밍 언어을 정의한다는 것은 구문구조와 의미를 정의하는 것이라고 할 수 있다.
- Syntax란 프로그래밍 언어의 “형태”를 말한다.
-
Semantics란 프로그래밍 언어 구문의 “실행동작”을 말한다.
- 일반적으로 자연어로 작성되며,
undefinedorunspecified behavior가 존재하기도 한다.
- 일반적으로 자연어로 작성되며,
Leave a comment