일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 스프링 폼
- 유니크제약조건
- dfs
- 낙관적락
- fetch
- 다대다
- querydsl
- 다대일
- exclusive lock
- 백트래킹
- 즉시로딩
- 연결리스트
- PS
- 동적sql
- JPQL
- shared lock
- 지연로딩
- 스토어드 프로시저
- eager
- 일대다
- execute
- 이진탐색
- BOJ
- FetchType
- 힙
- 비관적락
- SQL프로그래밍
- 연관관계
- CHECK OPTION
- 데코레이터
- Today
- Total
흰 스타렉스에서 내가 내리지
🤪 본문
# 2016
1. attribute grammar 란 무엇인가? ch03 158:18~
- CFG가 sentence의 문법 규칙만을 설명했다면, Semantic Rules 혹은 Attribute Equations 라는 것을 추가로 표기하여 BNF만으로는 표현할 수 없는 규칙들을 표현함과 함께 이 문법이 어떤 일을 하는건가를 의미론적으로 나타낸다.
2. C 언어에서 parameter scope 란 무엇인가? ch05 31p 3:17:40~
- 함수 파라미터에 있는 변수들은 그 함수 body의 끝까지(함수 블록에서 닫는 중괄호가 나올때까지) 스코프를 유지한다.
3. Algol-like 언어에서 block 과 compound-statement 의 같은점과 차이점 및 서로의 장단점은?
- function definition 이라는게 뭐냐면 declaration specifiers와 declarator 와 compound statement로 이루어짐
function definition 에 나오는 formal parameter는 선언한 다음부터 compound-statement의 끄트머리까지
엥 근데 이게 맞나 아니네
block
선언문들과 명령문들이 들어가 있는것
block 단위로 메모리가 생겼다 없어졌다 함. 이게 block-structured 언어야.
언제 메모리가 생긴다고? 함수가 activated 될때. 처음 호출돼서 일을 시작할때 그 때 메모리가 생긴다고. 그 단위가 block이야
근데 c언어 함수블럭은 activated 될때 생기는 게 아님. ???할때 생김. 그래서 실은 block이 아니라고 얘기함
왜냐하면 memory allocation 하는 단위가 아니기 때문. 그래서 이런거를 block 이라고 안부르고 그냥 compound statement 라고 부름. 선언문이랑 명령문이랑 같이 들어가 있다고 해서.
block이나 compound statement나 생긴것과 scope를 따지는 것은 둘 다 똑같은데, memory allocation의 단위가 다르다.
공통점 : 중괄호{ } 안에 선언문들과 명령문들이 들어잇는 묶음이다.
차이점 : Block은 중괄호 안에서 선언된 지역변수들을 memory allocation하지만, compound statement는 하지 않는다.
4. C의 예약어 static과 extern의 각각 사용 목적은? -(메모리의 활성화 관련해서 설명해야 함)
- static은 정적 변수를 선언하기 위해 사용됩니다. 해당 변수는 프로그램이 종료될 때까지 메모리에서 사라지지 않고 값을 유지합니다.
- extern은 전역 변수를 선언하기 위해 사용됩니다. extern으로 선언된 전역 변수는 여러 파일에서 공유하여 사용할 수 있습니다.
- 두 변수 모두, 프로그램 실행 이후 그리고 main() 함수가 실행되기 전에 전역변수들과 함께 runtime stack의 제일 아래에 activation record가 생성됩니다.
5. C 언어에서 named constant 선언은 어떻게 하나?
- enum{ } 안에 선언
7. 다음의 C언어 선언문 혹은 수식문의 의미는 무엇이고, 정당한지 혹은 아닌지를 설명하시오
(1) int (*a[10])(int, int, ...);
- 함수 포인터를 배열로 선언
- a는 10개의 원소를 가지는 배열이며, 배열의 원소는 함수를 가리키는 포인터이다.
- 이 때 함수는 int 형을 반환하며, 인자로 int 2개와 가변인자를 받는다.
- 즉, 이 선언은 int형 반환값을 가지며, int와 가변 인자를 받는 함수를 가리키는 함수 포인터 10개를 저장하는 배열을 선언한 것
(2) *p = 20;
- 포인터 p를 선언하고, p가 가리키는 메모리 주소에 값 20을 할당한다.
- 이거 p가 lvalue인지 알수 없으니까 정당하지 않다 아니야??
- 맞습니다..ㅎ 그렇게 써야겠네요 이따 수정함
8. C 와 같은 고급언어 프로그램을 컴파일러를 이용하여 번역한 다음 실행하지 않고 인터프리터를 이용한다면 그 타당한 이유는 무엇인가
- 한 번만 실행하고 버릴 프로그램이거나, 혹은 매우 간단한 프로그램이라면, 컴파일러를 이용해 기계어로 변환 후 실행파일을 만드는 과정을 거치지 않고 프로그램을 바로 실행하는 인터프리터를 이용하는게 더 빠를 수 있다.
9. 다음의 C 언어 프로그램에서 /*빈칸*/ 부분에서 사용 가능한 이름을 모두 나열하시오
int a;
main(){
int b;
{int c;}
{int d; /*빈칸*/}
}
int e(int f){ int g;}
- a, b, d, main()
10. 블록구조 언어의 프로그램의 실행 시에 만들어지는 dynamic chain 과 static chain의 역할 (혹은 사용목적)은 각각 무엇인가?
이거 dynamic scope이랑 static scope얘기인가?? (5장29p)
- static scope은 자기 block에서 선언됐는지 확인 후 없으면 자기를 감싸고 있는 바깥 block에 선언되어있는지 확인
- dynamic scope은 자기 함수에서 사용하고자 하는 이름 선언 없으면 직전에 호출했던 함수에서 찾아본다. calling sequence를 따름.
11. int a=10; 이라는 구문이 지역변수로 잡힐 때와, 전역변수로 잡힐 때 메모리에 어떻게 쌓이고 또한 scope 라던지 그런 것들을 설명하라
- 지역변수 : 실행 시 메모리스택에서 해당 구문이 선언된 함수의 activation record에 메모리가 잡힌다.
- 전역변수 : 실행 시 메모리스택의 제일 하단에 있는 activation record에 base로부터 선언된 순서대로 존재한다.
12. 컴파일 과정에서 의미분석(semantic analysis) 이란 무엇을 하는 과정인지 아는 대로 설명하시오
- systax analysis에서 문법적으로 올바른지 검사가 끝났다면, semantic analysis에서는 수식의 값이 무엇인지, 프로그램이 출력하는 내용이 무엇인지 등 의미적으로 올바른지를 판단한다.
- 의미 분석을 위한 방법으로는, Attribute grammars 와 Axiomatic semantics 등이 있다.
- Attribute Grammars 는 어쩌구 저쩌구... 맨 위에 문제에 있음
- Axiomatic semantics는 어떤 프로그램이 옳음을 수학적으로 증명하는 방법입니다.
2-1. 다음의 context-free grammar는 ambiguous 한가를 말하시오 :
S → ( S ) S |
- 모든 sentence에 대하여 동시에 만족하는 두개 이상의 parse tree 찾을 수 없으므로 ambiguous 하지 않습니다.
2-2. 이 문법이 나타내는 언어를 간단히 말로 설명하시오.
- 문자열에 사용된 소괄호들의 짝이 모두 올바른 언어입니다.
2-3. sentence "( () () ) ()" 에 대한 leftmost derivation과 신택스 트리를 보이시오.
-
🤔3. 다음의 프로그램을 x를 y로 나눈 몫과 나머지를 각각 q와 r에 저장하는 프로그램이다. 프로그램 중간에 표기된 assertion들을 이용하여 이를 증명하시오.
- 증명 어케함?
4-1. Algol-like 언어 프로그램 실행시 만들어지는 activation record 란 무엇이며, 언제 생성되고 소멸되며, 어떤 내용으로 구성되는가? ch05 20p
- 함수가 호출이 돼서 제대로 동작하려면, 함수의 메모리가 있어야 하는데, 그 메모리의 단위를 activation record 라고 한다.
- activation record는 1. 리턴 값, 2. 값 파라미터, 3. 반환 주소, 4. 지역변수 로 구성되어있다.
- activation record는 지역변수, 이전 함수의 base 주소 등이 저장되어 있다.
- 운영체제가 main() 함수를 호출하는 순간 main() 함수의 활성화 레코드가 메모리 스택에 생성된다.
- A 함수가 B 함수를 호출하면, B 함수의 활성화 레코드가 A 함수의 활성화 레코드 위에 스택구조로 쌓인다.
- 함수가 리턴되면 해당 함수의 activation record도 함께 소멸된다.
4-2. static 변수, stack dynamic 변수, 및 heap dynamic 변수의 생성 및 소멸 시기와 위치에 관란 차이점에 대해 간단히 설명하시오. ch05 21p
- static 변수:
- 프로그램이 시작하고, main() 함수가 호출되기 전에, runtime stack 의 제일 아래 이 static 변수의 activation record가 메모리로 할당됩니다.
- 프로그램이 종료되기 전까지 메모리상에 고정된 위치에 저장되며, 소멸되지 않습니다.
- stack-dynamic 변수 :
- memory stack에 dynamic하게 메모리를 할당하고 소멸시킵니다.
- 프로그램이 시작되면 메모리를 스택처럼 사용하고, 함수가 호출되자마자 해당 함수의 지역변수의 크기만큼 하나씩 동시에 메모리가 할당된다. 함수 내부에서 또 다른 함수를 호출하면, 호출한 함수의 메모리 스택 위에 호출당한 함수의 메모리 영역을 할당합니다.
- 함수가 리턴되면 해당 함수가 할당받은 메모리 영역이 스택에서 사라집니다.
- heap dynamic 변수 :
- c언어에서 malloc()이나 calloc() 같이 heap storage allocation 하는 명령어가 호출되면, 메모리 스택의 최상단에서부터 인자로 받은 양만큼 잘라서 메모리 할당을 해줍니다. 이 할당된 메모리 장소를 heap이라고 부릅니다. free() 명령어가 호출되면 힙 영역에 메모리가 반환됩니다.
프로그램 시작 → 메모리를 스택처럼 사용 → main() 함수 → 함수가 시작되자마자 메모리가 잡힌다. 얼마나 잡히냐? 함수에서 필요로 하는 x, y의 주소가 잡힘. 함수호출 전에 메모리에 잡히는게 아니다. 함수호출 same time도 아니다. 되자마자. →
# 2021
1. 컴파일러와 인터프리터의 장단점
컴파일러 | 인터프리터 | |
방식 | 프로그램 전체를 스캔하여 모두 기계어로 번역한다. 전체를 스캔하기 때문에 초기 스캔 시간이 오래 걸린다. |
프로그램 실행 시 한 번에 한 문장씩 번역한다. |
시간 | 하지만 전체 실행 시간만 따지고 보면 인터프리터 보다 빠르다. | 한번에 전체를 스캔하고 실행파일을 만들어서 실행하는 컴파일러보다 실행시간이 더 걸린다. |
오류 | 전체 코드를 스캔하는 과정에서 모든 오류를 한꺼번에 출력해주기 때문에 실행 전에 오류를 알 수 있다. | 프로그램을 실행시키고 나서 오류를 발견하면 바로 실행을 중지 시킨다. 실행 후에 오류를 알 수 있다. |
- 컴파일러는 프로그램 전체를 스캔하여 모두 기계어로 번역한다. 전체를 스캔하기 때문에 초기 스캔 시간이 오래 걸린다.
하지만 전체 실행 시간만 따지고 보면 인터프리터 보다 빠르다.
왜냐하면 컴파일러는 초기 스캔을 마치면 실행 파일을 만들어 놓고 다음에 실행할 때 이전에 만들어 놓았던 실행파일을 실행하기 때문이다.
전체 코드를 스캔하는 과정에서 모든 오류를 한꺼번에 출력해주기 때문에 실행 전에 오류를 알 수 있다.
- 인터프리터는 프로그램 실행 시 한 번에 한 문장씩 번역한다.
그렇기 때문에 한번에 전체를 스캔하고 실행파일을 만들어서 실행하는 컴파일러보다 실행시간이 더 걸린다.
프로그램을 실행시키고 나서 오류를 발견하면 바로 실행을 중지 시킨다. 실행 후에 오류를 알 수 있다.
2. C언어 문법은 모호하다고 한다. 왜 모호함? - ch03, 20p
- syntax tree가 2개 이상이 만들어지는 sentence가 발견이 될 때, 그 문법을 모호하다고 합니다.
C언어는 if 문에 ambiguity 문제가 있습니다.
if-statement의 BNF는 다음과 같습니다.
<if stat> → if ( <expr> ) <statement>
| if ( <epxr> ) <statement> else <statement>
모호한 sentence 예시 : if (b1) if (b2) x := 1 ; else x:= 2 ;
위 sentence는 syntax tree가 2개 만들어질 수 있으므로, if 문때문에 C언어 문법은 모호하다고 할 수 있습니다.
3. ()()()잘못쓴듯 ( ( ) ) ( ) 같은 구문이 있다. 이걸 생성한 문법은 S→ SS | (S) | () 이다. 모호한지 밝히고 leftmost 방식으로 증명해라
- sentence에 대하여 동시에 만족하는 두 개 이상의 parse tree를 찾을 수 없으므로 ambiguous 하지 않습니다.
4. C언어에서 block이란 무엇인가?
- C언어에서 block은 중괄호로 감싸진 코드 블록을 의미합니다. 보통 조건문, 반복문, 함수 등에서 사용됩니다.
block 안에서 선언된 변수는 해당 block 안에서만 사용할 수 있으며, block을 벗어나면 사라집니다. 이를 지역변수라고 부릅니다.
5. abstract declarator에 대해서 설명하고 언제 사용되는 건지 설명하라 - ch03-2, 14p
- int a (int, float, int * ) 와 같은 sentence를 보면, parameter_specifiers 뒤에 declarator가 없습니다.
즉, parameter_declaration에서 declaration_specifiers 뒤에 이름이 없는 채로 나온 것을 abstract declarator(추상 선언자)라고 부릅니다.
Abstract declarator는 함수 포인터, 배열 포인터, 그리고 복잡한 자료형의 선언에서 사용됩니다.
함수 포인터를 선언할 때는 함수 포인터의 반환값과 매개변수의 자료형을 지정해야 하는데, 이 때 abstract declarator를 사용하여 자료형을 추상화하고 선언합니다.
또한 배열 포인터를 선언할 때도 배열의 크기나 요소의 자료형을 추상화하여 선언하는 경우에 사용됩니다.
6. lvalue 수식이란 무엇인지 예를 들어 설명하고 ...(대충 lvalue 뭔지 싹 다 외워가라)
- lvalue는 주소를 가지는 변수나 메모리 공간 등의 위치 정보를 갖는 식이어야 한다.
- lvalue expression이란 메모리 위치를 참조하는 식으로, equal(=) 왼쪽 값으로 올 수 있는 표현식이다.
예시 :
문장 | 가능여부 | 가능 불가능 케이스 |
a=10; | * | OK → a가 주소를 갖는 변수일때 X → a가 상수이거나 배열명이거나 함수 호출의 결과 등의 값을 가질 때 |
*a=10; | * | a는 무조건 포인터여야 함. OK → int *a X → int (*a)[] : a는 포인터인데, 포인터가 배열을 가리킬 때 |
(a+b) = 0; | X | 더하기를 포함한 수식은 lvalue-expression이 절대 될 수 없다. |
&a = 0; | X | & 연산자는 변수의 메모리 주소를 나타내기 때문에, 이를 값으로 할당하는 것은 불가능하다. |
**p | * | OK → 1. p는 포인터 2. p가 가리키는 메모리 공간에 다시 포인터 변수가 있어야 한다. 즉, 이중 포인터여야 한다. |
(a, b) = 10; | X | comma가 있는 수식은 lvalue-expression이 될 수 없다. |
(a) | X | 항상 rvalue expression이다. (a)는 그 자체로 변수나 객체를 가리키지 않고, 단지 a라는 변수가 가지고 있는 값을 의미하는 값(value)이기 때문이다. |
7. char[3][5] = {"csh", "csh2", "csh3"} 와 char *[3] = {"csh", "csh2","csh3"} 의 차이점
- char[3][5] = {"csh", "csh2", "csh3"}"는 2차원 배열로 크기가 3x5이고 3개의 문자열을 담고 있습니다. 각 문자열은 5개의 문자까지만 저장할 수 있습니다.
- char *[3] = {"csh", "csh2", "csh3"}"는 포인터 배열로 크기가 3이고 각각의 요소는 문자열을 가리키는 포인터입니다. 각 문자열의 길이에 제한이 없습니다
- 즉, 첫 번째 배열은 3개의 길이 5인 문자열을 저장할 수 있으며 두 번째 배열은 3개의 문자열을 가리키는 포인터를 저장합니다
1. s의 타입이 전자는 배열의 배열, 후자는 포인터의 배열이므로 메모리 상으로 전자는 15byte+1byte, 후자는 12byte or 24byte를 차지한다.
2. "csh", "csh2", "csh3" 와 같은 string 이 메모리 상에 저장된 영역은,
전자는 activation record, 후자는 constant area에.
🤔8. named constant가 무엇인지 설명하라.
- 귀찬ㅇ냄ㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁ
- 상수를 뜻하고...
- C 언어에서 상수를 선언하는 방법으로 알려진건
1. # define 문과
2. const 선언과
3. enum 선언이 있는데,
- # define은 사실 상수 선언이 아니고,
- const 도 사실 엄연히 따지면 상수가 아니고 변수임. 변수의 성질을 지정하는거임. 바꾸지 마라고.
- C언어에서 진짜 상수를 선언하는 유일한 방법은 enum에다 하는것이며...
- 상수는 어쩌구 저쩌구.....
- 또 뭘 써? 이게 맞나요..
9. constant 영역이 뭐고 Activation record에 뭐가 쌓이고 언제 생성되서 소멸되는지 말하라
- constant영역 : 프로그램이 실행되기 전에, 상수들을 모아 저장하는 영역입니다. 일반적으로 string literal, 실수, 큰 정수가 들어갑니다.
- activation record : 호출되는 함수들의 지역변수들의 메모리가 쌓이고 해당 함수가 return 되면 소멸
10. static scope가 dynamic scope에 비해서 장단점이 있나?
- 일반적으로는 dynamic scoping을 하는 프로그래밍 언어가 실행시간이 더 길다.
왜냐면 메모리를 많이 차지하니까.
어떤 변수를 사용할수 있는지 없는지를 실행시에 판단을 해야된다는 건, 실행시에 사용할 수 있는 이름에 대한 정보를 다 가지고 있어야 하니까. 이는 메모리에 저장을 해야 한다는 거다.
C언어같은 static scoping은 사용할 수 있는 이름에 대한 정보가 실행 중에는 아무것도 없다. 다 주소로 바뀌어져 있음.
dynamic scope는 메모리도 많이 들고, 실행시간도 오래 걸린다.
dynamic scoping을 하는 프로그래밍 언어는, 어떤 변수를 사용할수 있는지 여부를 실행시에 판단하기 때문에 실행시간이 static scope보다 더 깁니다. 그리고 실행시에 사용할 수 있는 이름에 대한 정보가 메모리에 다 저장되어 있어야 하므로 static scope보다 메모리를 많이 차지합니다.
12. int a=10; 이라는 구문이 지역변수로 잡힐 때와, 전역변수로 잡힐 때 메모리에 어떻게 쌓이고 또한 scope 라던지 그런 것들을 설명하라
지역변수 : 이 변수를 선언한 함수가 호출될때 activation record에 메모리 잡히며, 함수 block이 닫힐때까지 scope가 지속
전역변수 : 이 프로그램이 실행되고, main() 함수가 실행되기 전에, runtime stack의 제일 바닥에 activation record로 메모리가 잡히고, 프로그램 종료까지 scope지속
13. const와 static 에 대해서 설명하라 (1줄 내로)
- const는 상수(constant)를 정의할 때 사용되며, 선언한 변수에 대해 값을 수정할 수 없도록 합니다
- const는 선언한 변수에 대해 값을 수정할 수 없도록 합니다
- static은 정적(static) 변수를 정의할 때 사용되는데, 정적 변수는 프로그램이 종료되기 전까지 메모리상에 고정된 위치에 저장되며, 소멸되지 않습니다.
14. algo-like 에선 block 이란 무엇인지 설명하고, compound_statement에서 어떤 차이를 보이는가?
block은 { } 안에 선언한 변수들을 memory allocation 하며,
compound_statement는 생긴건 같지만, memory allocation을 하지 않는다.
#???
6. Algol 계열 언어에서 constant는 무엇이고 c언어와 무엇이 다른가?
- c언어의 const는 변수의 성질을 지정합니다. 바뀌지 마라고
- pascal에서 const는 명칭상수를 선언합니다.
-pascal에서의 const가 진짜 상수임
9. 런타임 스택에 관해 설명하고 constant에는 무엇이 할당되는지 예를 들어 설명하라.
- 런타임스택은 블라블라~~
- constant 영역에는 프로그램 실행 전에 상수들을 모아 놓습니다. 일반적으로 string literal, 실수, 큰 정수들이 할당됩니다.
#2020
4. c언어에서 run-time storage에 대해 그림을 그리고 간단히 설명하시오..
- constant, heap, stack(확대해서 activation record들 그려주기) 하고 간단하게 설명하면 될듯!
6. recursive-decsent parsing 이 잘되기 위한 조건을 쓰고 그에 대해 간단히 설명하라. - ch04
- recursive-descent parsing 은,
이렇게 if-else 하면서 호출하면서 비교하는 프로그램
대표적인 top-down style의 parser 중 하나이다.
뭘 이용해서 만든다구요? syntax diagram을 그린 다음에 이 그림에서 if-else 호출하면서 프로그램을 짠다
main에서 token 하나 읽어놓고 expression 호출.
expression에서는 term을 호출. term에서는 factor를 호출.
factor는 number인지 여는괄호인지 비교. number이면 다음 토큰 읽고 factor 끝냄.
여는괄호가 나왔으면 expression 호출. expression이 expression을 호출할 수 있다.
이렇게 syntax analysis 하는 방법을 recursive descent parser 라고 한다
pascal 컴파일러가 이 방법을 이용함
C언어는 이 방법으로 안됨
그래서 recursive-descent parsing은 systax diagram을 잘 그린 다음에, 그림만 잘 그리면 recursive-descent parser는 일사천리로 프로그램 짜면 되는거야. if-else if-else 호출하면서.
근데 이 그림을 마음대로 그리면 안되기 때문에 제약조건이 많이 있어요
다시 한번 얘기해 봅시다. 이런 수식을 검사하는 프로그램을 짜고 싶어.
이런 입력은 단순하지가 않잖아. 굉장히 복잡한 문법 구조를 가지고 있잖아.
이런 입력이 맞았나 틀렸나를 검사하는 프로그램을 짠다 그러면은 기술이 필요한거야
여러분은 먼저 입력 string이 올바른지 아닌지를 체크하기 위한 syntax diagram을 만들어야한다.
만들면 프로그램 짜는건 간단해진다.
넓게 봐서는 top-down parser의 일종이다.
7. algol-like 언어에서 블럭에 대해 서술하고 그 중요성에 대해 써라.
(1) block 이란 무엇인가
- C언어에서 block은 중괄호로 감싸진 코드 블록을 의미합니다. 보통 조건문, 반복문, 함수 등에서 사용됩니다.
block 안에서 선언된 변수는 해당 block 안에서만 사용할 수 있으며, block을 벗어나면 사라집니다. 이를 지역변수라고 부릅니다.
(2) 중요성
- 1. 변수의 유효 범위를 제한함으로써 코드의 가독성과 유지보수성을 높일 수 있습니다.
- 2. block 내에서 선언된 지역변수는, block을 벗어날 때 소멸됩니다. 이를 통해 지역 변수의 수명을 제한함으로써 프로그램의 메모리 사용량을 최적화할 수 있습니다.
8. type binding 이란 누가 어떻게 무엇을 하는 것이며. type binding 의 차이와 특징에 대해 기술하라
(static binding 과 dynamic binding 을 주로 서술할것) - ch05,17p 1:21:30~
- 프로그램이 언어의 여러가지 이름이나 변수나 연산자의 속성을 결정하는 일련의 작업들을 binding이라고 한다.
compile time에 결정하는 static binding 이 있고, 실행시에 결정하는 dynamic binding이 있다.
static binding은 변수의 속성을 실행중에 바꿀 수 없고, dynamic binding은 실행 중에 바꿀 수 있다.
++ 추가
block scope - ch05 31p 3:17:00~
- axiomatic semantics : 어떤 프로그램이 옳음을 수학적으로 증명하는 방법. 언어 자체를 표현한다기보다는 예시를 증명하는 방법을 쓴다.
- Algol 계열 언어 : C, C++, JAVA
'2023' 카테고리의 다른 글
OS - Final (0) | 2023.12.04 |
---|---|
DB - Major Funtionalities of Database Systems (1) | 2023.10.23 |
Information Security - ~ 4.Theory of Secure Communication. (0) | 2023.09.25 |