Defining Languages (프로그래밍 언어 정의)
구문(syntax)와 의미(semantics)
구문은 트리를 정의하는 것과 유사, 계층적 정의
구문을 다루는 건 구문론이고 의미를 다루는 건 의미론
저번주 복습
Fortran - 과학
Lisp - AI
Algol - 알고리즘
Cobol - 사무용
이를 통합하자! 하고 만든 게 PL/I
급하게 만들다보니 PL/I 가 너무 커져서 이해하기 힘들었음
시분할 시스템 OS인 MULTICS와 함께 사용
너무 큰 프로그램이라 PL/I 를 C 로 MULTICS를 UNIX 로 축소화 시킴
C는 아주 간단, 대조적은 언어임. 작은 언어.
BASIC의 교육열을 이어사 PASCAL이 나옴 이와 유사한 SMALLTALK 나오고 SIMULA의 영향을 많이 받은 Smalltalk, Lisp의 발전이라고 할 수 있는 Scheme, Fortran이 계속 발전한 Fortran77이 개발
smalltalk의 영향을 받은 객체지향 언어 Objective-C , Simula에 영향을 받은 C++, Lisp 을 통일해보자해서 나온 Common Lisp , 그리고 Perl,Tcl같은 스크립트 언어가 발전하기 시작
객체지향 언어는 GUI 와 더불어 발전했다는 걸 기억
90년 대부터 데이터가 발전했고 이는 스크립트와 함께 발전
파이썬 탄생, Java와 C#도 발빠르게 인터넷 언어로 발전, Fortran은 계속 발전 , 파스칼은 GUI와 더불어서 Delphi와 함께 나옴
자바스크립트와 파이썬은 객체지향느낌이 약간씩 남
Ruby, Delphi는 객체지향언어
함수형 언어는 Lisp, APL, Scheme, Haskell, CommonLisP
함수형 언어도 천천히 발전하고 있고 현재는 패러다임이 섞여들어가고 있음
언어를 어떻게 정의할지 Syntax는 무엇인지 Syntax를 나타낼 수 있는 문법을 보고 이 문법의 모호성을 보고 문법의 단점을 해결하기 위해 나온 BNF, EBNF ,Syntax Chart 등 을 배워봄
언어는 규칙의 집합
형태에 관한 규칙(Syntax)
의미에 관한 규칙 (Semantics)
누구에게 언어의 정의가 필요하나
언어 디자이너, 구현자, 사용자(프로그래머들)
Syntax
보통 Formal Language로 설명
C언어는 C로 작성할 수 있는 모든 프로그램(Hello.c, gcd.c .....)의 집합
Hello.c 프로그램 1 , gcd.c 는 프로그램 2,... 이렇게 무수한 프로그램들 중 하나를 Sentence라고 정의
char sequence 가 있고 단어 sequence 가 있는데 Lexeme 가 단어임
여기에 단어에 있는 분류를 Token 이라고 함
정수는 0~9 까지의 집합으로 있다고 했을 때 011 도 정수임
비슷한 영역의 집합(정수같은) 을 Token 이라고 함
예시
여휘 요소 (단어) = Lexeme
int
main
(
)
{
return
printf
)
토큰
int - INT_TYPE
main - ID
( - LPAREN
) - RPAREN
Quadruple(V,T,S,P)
v: N
T : constants 바꿀 수 없는거
S : stant symbol
P : a set of rules(생성 규칙)
Algol 만들었는데 매우 유사하네 하고 합친게 BNF
BNF는 텍스트 표기 방법
표현력이 CFG와 같음
CFG는 규칙의 집합
아래 사진 중 파스칼 부분은 좌변이 우변으로 바꿀 수 있다는 규칙을 명시함
정리
언어는 규칙의 집합이고 언어는 형태에 대한 정의 - 구문론 과 의미에 대한 정의 - 의미론이 있음
Formal Language는 Syntax를 정의하기 위한 언어
language, sentences, token, lexeme 로 구성
여기서 language와 token 은 SET임
sentence 하고 lexeme는 SEQUENCE
왼쪽항은 오른쪽 항의 서브셋
regular(type3) - FA < context-free(type2) - PDA < context-sensitive(type1) - LBA < unrestrictedone(type0) - TM
오토마타는 설명 안 함
N - 비단말기호
T - 단말기호
P - 생성 규칙
S - 시작기호
'공부 > 프로그래밍 언어론' 카테고리의 다른 글
[프로그래밍 언어론 과제] 7. Prolog 로 팩토리얼 구현 (0) | 2021.05.21 |
---|---|
[프로그래밍 언어론] 10. 구문론2 (0) | 2021.04.14 |
[프로그래밍 언어론] 6. 프로그래밍 언어의 발전 3 (0) | 2021.04.13 |
[프로그래밍 언어론] 4. 프로그래밍 언어의 발전 1 (0) | 2021.04.12 |
[프로그래밍 언어론] 2. 언어의 기능 (0) | 2021.04.12 |