[PL] Syntax & Semantics

parkheeddong·2023년 3월 14일
0
post-thumbnail

1. 프로그래밍 언어의 정의와 목적


프로그래밍언어는 인간의 언어를 기계어 코드로 변환할 수 있는 규칙들의 집합(set of rules)이다.

프로그래밍 언어가 필요한 주 목적은 기계와의 communication에 있다. 그러나 이 뿐 아니라, 프로그래밍 언어를 이용하면 모호한 자연어를 이용하여 소통하는 것보다 사람들 간의 소통이 더 명료해지기도 한다.



2. 기계어, 어셈블리어, 하이레벨 언어


1) 기계어(Machine Language)

기계어는 0과 1의 이진법 체계로 이루어져 CPU는 이해 가능하지만 사람들이 이해하기에는 어려운 언어를 이른다. 각 CPU마다 그에 맞는 specific한 기계어를 가지고 있다.

2) 어셈블리어(Assembly Language)

어셈블리어는 로우 레벨의 언어로서, 기계는 이해하지 못하지만 사람은 이해할 수 있는 언어다. 기계어를 어셈블리어로 직접적으로 변환할 수 있다.

니모닉(mnemonic)이란 기억을 돕는다는 뜻으로, 기억하기 쉽도록 간략하게 만든 코드(LDA, ADD 등)

3) 하이레벨 언어

C/C++, Python, Java, Ocaml 등의 하이레벨 프로그래밍 언어들은 기계어가 이해하지 못하고 사람들이 이해할 수 있는 언어들이다.





3. 프로그래밍 패러다임

프로그래밍 패러다임은 '프로그램 코드의 구조를 생각하는 방식'의 차이에 있다.

프로그래밍 패러다임은 명령형 프로그래밍과 선언형 프로그래밍으로 나눌 수 있는데, 명령형 프로그래밍은 무엇을 할 것인지보다 어떻게 할 것인지를 설명하는 방식이라면 선언형 프로그래밍은 어떻게 할것인지보다 무엇을 할 것인지 설명하는 프로그래밍이다.

1) 명령형 프로그래밍 : 어떻게(how) 할 것인가

(1) 절차지향 프로그래밍 언어

  • 순차적으로 처리해나가는 프로그래밍 기법이다.
  • 코드의 가독성이 좋고, 실행 속도가 빠르다.
  • 코드가 순서에 따라 실행되기 때문에 유지 보수를 하거나 분석을 하기 어렵다.
  • 대표적으로 C언어가 있다.

(2) 객체지향 프로그래밍 언어

  • 데이터들을 객체(오브젝트)로 취급해서 객체가 요청을 받으면 객체 내부 기능을 이용해 처리하는 기법
  • 코드의 유지 보수에 편리하고, 분석하기 편하다.
  • 절차지향 프로그래밍에 비해 처리 속도가 상대적으로 느리다.
  • 대표적으로 자바와 파이썬이 있다.

2) 선언형 프로그래밍 : 무엇을(What) 할 것인가

함수형 프로그래밍 언어

  • 함수를 이용하여 빠르게 처리하는 데 초점을 둔 방법이다.
  • 코드 가독성이 높고 유지보수가 좋다.
  • Ocaml, 스칼라, 파스칼 등 이 있다.




4. 프로그래밍 언어의 Syntax와 Semantics



✅ 서로 다른 프로그래밍 언어는 서로 다른 syntax과 서로 다른 semantics를 가진다.

📌 syntax의 차이

< 조건문 syntax >

C : if-else
Ocaml : if-then-else

📌 semantics의 차이

< and 연산자의 semantics >

Python : Short-Circuit-Evaluation (=AND 혹은 OR 의 연산의 결과가 확실히 예측될 때 뒤에 나머지 연산을 실행하지 않는 것)
if (1==2 and 1==1) 에서, 전자가 False면 후자는 검사하지 않는다.
Ruby : 전자의 값과 상관 없이 스킵하지 않고 검사한다.



✅ 서로 다른 프로그래밍 언어는 서로 다른 property와 expresiveness를 가진다.

📌 property

C : performance (성능)이 좋으므로 시스템 프로그래밍에 적합
Ocaml : reliability가 좋으므로, 어플리케이션 프로그래밍에 적합

📌 expresiveness

C: Pointer, Inline Assembly 등 low-level memory에 접근하고 변경하는 것 가능. 알고리즘 최적화에 적합.
Ocaml : low-level memory 변경이 불가능. functions as value가 가능하므로 간결한 프로그램(concise program)에 적합.




✅ 프로그래밍 언어는 syntax(문법)과 semantics(의미)로 구성된다.

새로운 프로그래밍언어를 개발할 때에는, syntax와 semantics를 개발해야 한다.

1) 프로그래밍 언어의 Syntax 정의

How the language 'looks like'

2) 프로그래밍 언어의 Semantics 정의

How the language 'operate'



0개의 댓글