언어 정의 - 구문, 의미
- 자연어 정의 , 형식 정의
- 구문 형식 정의 - BNF, EBNF , 구문 도표
컴퓨터
- 프로그램을 실행 할 수 있는 알고리즘 + 자료구조 집합
- 하드웨어 컴퓨터 (실제 컴퓨터)
- 소프트웨어 시뮬레이터 컴퓨터
- 가상 컴퓨터 ( virtual computer)
가상 컴퓨터 -> 고급 언어 프로그래머는 컴퓨터를 가상의 고급 언어 컴퓨터로 간주
언어 구문
- 프로그래밍 언어에서 사용할 수 있는 문자들의 집합
- 알파벳 (A-Z) 26개 + 아라비아 숫자 (0-9) 10개
ex) Fortran : 기본 문자 집합 + 13개의 특수문자 (+ - * / ( ) , . $ ` : 공백)
ex) Algol 60 : 알파벳 대소문자 52개 + 아리바아 숫자 10개 + 28개의 특수문자
문자 코드 체계
- EBCDIC (Extended Binary Coded Decimal Interchange Code)
- IBM에서 제안, 8비트 조합 코드
- ASCII (American Standard Code for Information Interchange)
- ANSI에서 제안 , 7비트 조합 코드 (128개의 문자 표현)
- 영문자 대소문자 52개 + 숫자 10개 + 33개 특수문자 + 33개 제어문자
- 유니코드(Uni code)
- 16 bits
- ISO 표준 규격
- Java에 시행
정합 순서(collating sequence)
- 언어에 제공된 문자 순서
- 일반 순서를 지킴 ( 0 < 1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 )
( A < B < C < ... < X < Y < Z)
- 특수 문자 순서
- 코드 체계를 따름
- 프로그래머 정의 가능 (RPG, Snobol)
- 어휘 구조 용어
- 어휘 토큰
- 언어 구성자
- 식별자 , 미리 정의된 식별자 , 예약어
- 구분자, 분리자
Syntax 구성
- 어휘토큰 (lexical token) , 어휘요소 (lexical element) , 어휘단위 (lexcial unit)
- if , < , = , 등등
- 규칙에 의거하여 기본 의미 단위를 표현하는, 한 개 이상의 프로그램
- 언어의 알파벳 문자로 구성된 문자열
- 언어 구성자
- language construct
- 용어 국제 표준 규격 15.01.02
- 프로그래밍 언어의 규칙에 따라 한 개 이상의 어휘 토큰으로 형성되며, 구문적으로 허용된 프로그램의 일부
- 식별자 [프로그래밍 언어에서]
- identifier [ in programming language]
- 용어 국제 표준 규격 15.01.03
- 언어 구성자를 명명하는 어휘 토큰 ex> 변수, 배열, 레코드, 레이블, 프로시저 등의 이름
- <주>식별자는 문자가 맨 앞에 오고 , 그 뒤 영문자, 숫자, 그 밖의 문자가 0개 이상 따라옴
- 미리 정의된 식별자
- predefined identifier
- 용어 국제 표준 규격 15.01.04
- 프로그래밍 언어의 일부로 정의된 식별자
- ex> 예약어
- <주> 미리 정의된 식별자가 예약되어 있지 않다면, 그 식별자를 사용한 선언으로 선언의 영역에서 식별자의 의미를 재정의
- 예약어 (reserved words or key words)
- 용어 국제 표준 규격 15.01.05
- 프로그래머가 재정의할 수 없는 미리 정의된 식별자
- <주> 모든 프로그래밍 언어가 예약어를 가지고 있지는 않다
- 언어 어휘를 구성하는 단어나 기호 형태의 문자 알파벳
- 프로그램의 변수 이름으로 사용 불가
장점: 프로그램의 판독성 증가, 기호 테이블을 빠른 시간안에 탐색 가능
단점: 많은 예약어 기억하기 어려움 , 언어 확장 시 새로운 예약어가 확장 이전 사용했던 프로그램의 식별자와 중 복우려
- BNF ( Backus - Naur Form)
구문(syntax) 형식을 정의하는 가장 보편적인 방법
한 언어의 구문에 대한 BNF 정의 - 언어의 문장을 생성하는 생성규칙 정의
생성규칙 - 생성규칙의 왼쪽(정의될 대상) , 오른쪽(그 대상에 대한 정의)
ex> <identifier> ::= <letter> | <identifier><letter> | <identifier><digit>
<letter> ::= A | B | C | ... | X | Y | Z
<digit> ::= 0 | 1 | 2 | ... | 8 | 9
:: = 정의하다 , <> 비단말(nonterminal) , | 택일 기호
- EBNF (Extended Backus - Naur Form)
- BNF 표기법을 확장하여 보다 읽기 쉽고, 간단하게 표현된 표기법
- 반복 : { }, 0번 이상 반복
- 선택 : [ ] 0 또는 1번 선택
- 택일 : | 둘중 하나 선택
- 메타 기호를 언어의 terminal로 사용하는 경우 , '|' 와 '::=' 처럼 묶어서 표현
Nonterminal
<identifiers> : 식별자, 변수나 함수 이름등에 사용
<literal> : 상수를 나타냄, 따옴표로 묶인 문자열이나 숫자 등으로 이루어짐
<expression> , <exp> : 수식이나 계산식을 나타냄, 덧/뻴/곱/나 연산자 숫자 변수 등의 요소 포함
<statement> : 대입문, 분기문, 반복문 등등
<type> : 자료형 , 정수/실수/문자열 등의 자료형
<term> : 곱셈, 나눗셈 등의 연산자와 <factor>의 조합 수식
cf) 블록 : [] 대괄호 상수정의 변수정의 있어도 되고 없어도 무방 / {} 중괄호 0 번 이상 반복 함수 정의 /
컴파운드 –상태 st : 문장이 0 개 이상
컴파운드 –상태st : 비긴 end, 중간에 문장이 하나 이상 오는데 둘 사이의 구분이 ;
C 와 다른 부분 c 는 무조건 문장 끝에 ;
파스칼은 문장과 문장 사이 구분을 위해 ;
구문 도표 (Syntax Program)
- 순서도와 형태 유사
- EBNF와 일대일 대응
- 다시 정의될 대상은 네모칸 / 단말 기호는 원이나 타원형 / 이들 사이는 지시선
- 단말(터미널 노드) / 비단말(논 터미널 노드)
파스 트리(parse tree)
- 원시 프로그램의 문법을 검사하는 과정에서 내부적으로 생성되는 트리형태의 자료구조
- 한 표현이 BNF로 작성 될 수 있는지 여부 나타냄
모호/결합성/우선순위
모호(ambiguous) : 같은 스토리에 대해서 두 가지 서로 다른 파스 트리가 발생
모호성 제거 : 용어 국제 표준 규격 15.01.09
동일한 어휘 토큰 순서를 가진 다수의 언어 구성자 중 어떤 언어 구성자를 프로그램 내의 특정 사건이 참조 하는지 결정하는 행위
'CS(Computer Science) > 프로그래밍언어' 카테고리의 다른 글
2. Algol 60 , Algol 68 (0) | 2023.04.19 |
---|---|
1. Fortran (0) | 2023.04.19 |
3. 프로그래밍 언어 설계 시 주의점 (0) | 2023.04.07 |
2. 언어의 변천 (0) | 2023.04.07 |
1. 프로그래밍 언어론 소개 (0) | 2023.04.07 |