전체 글 183

[프로그래밍 언어론] 변수와 바인딩

변수의 개요 변수(variable) 데이터를 저장하거나 나중에 사용할 수 있도록 메모리를 추상화한 것 변수의 속성 변수명: 변수의 이름. 식별자 타입: 변수에 저장할 수 있는 데이터 집합의 종류 주소: 변수가 사용하는 메모리의 위치 값: 변수에 저장된 데이터. 수행시간동안 바뀔 수 있음 배런(D. W. Barron)의 표기법 하나의 변수를 표현하는 방법 바인딩(binding) 언어 구성 요소의 속성이 구체적으로 결정되는 것 바인딩 시각 구성 요소의 속성이 구체적으로 결정되는 것 언어의 구성 요소 혹은 속성에 따라 바인딩 시간은 다를 수 있음 언어의 정의 시점: 연산자의 의미, 수의 의미 등 언어의 구현 시점: 타입(int 등)의 자릿수, 수의 표기법 등 컴파일 시점: 변수의 타입 등 링크 시점: 라이브러..

CS 2023.12.01

[컴퓨터과학개론] 운영체제

운영체제 컴퓨터 하드웨어와 응용프로그램(프로그래머) 혹은 컴퓨터 사용자 사이의 인터페이스를 제공하는 시스템 소프트웨어 사용자 측면에서는 하드웨어에 대한 지식이 없어도 하드웨어에 접근하고 사용할 수 있는 하드웨어 사용의 편리성을 제공함 시스템 측면(개발자 측면)에서는 제한적인 컴퓨터 자원을 효율적으로 사용하기 위한 컴퓨터 자원 관리의 효율성을 제공함 프로세서 관리자 프로세스에게 프로세서(중앙처리장치-CPU)를 할당함 프로세스를 위한 중앙처리장치의 할당과 관리를 담당하고, 이를 위해 각 프로세서의 상태를 모니터링함 프로세스에게 중앙처리장치의 할당이 필요한 경우를 찾아내고 효율적인 관리를 위해 프로세스의 실행 상태를 변화시키기도 함 주기억장치 관리자 프로세스에게 주기억장치를 할당하고 프로세스로부터 할당된 주기..

CS 2023.11.30

[컴퓨터과학개론] 알고리즘

알고리즘 개념 주어진 문제를 풀기 위한 명령어들을 단계적으로 나열한 것 입출력: 0개 이상의 외부 입력, 1개 이상의 출력 명확성: 각 명령은 모호하지 않고 단순 명확해야 함 유한성: 한정된 수의 단계를 거친 후에는 반드시 종료해야 함 유효성: 모든 명령은 컴퓨터에서 실행 가능해야 함 효율성 → 주어진 문제에 대한 결과를 생성하기 위해 모호하지 않고 간단하며 컴퓨터가 수행 가능한 일련의 유한개의 명령들을 순서적으로 구성한 것 알고리즘 생성 단계 설계 표현/기술 정확성 검증 효율성 분석 자료구조와 알고리즘의 관계 자료구조: 데이터 사이의 논리적 관계를 표현하고 조직화 하는 방법 효율적인 프로그램을 위해 자료구조와 알고리즘을 고려해야함 알고리즘 설계 문제와 그에 따른 조건 등이 매우 다양 → 일반적이고 범용..

CS 2023.11.30

[프로그래밍 언어론] 프로그래밍 언어의 구현

프로그래밍 언어 정의와 구현 프로그래밍 언어 정의 어떤 프로그램이 올바른 형태인지, 또 올바른 형태의 프로그램을 실행하였을 때 어떻게 실행되는 것이 올바른 것인지 규정하는 것 구문(syntax): 형태에 대한 규정 의미(semantics): 실행 결과에 대한 규정 프로그래밍 언어 정의 방법 구문 정의: 문맥 자유 문법, BNF, EBNF, 구문 도표 의미 정의: 기능적 의미론, 표기적 의미론, 공리적 의미론 등 실제로 의미를 정의할 때, 여러 의미론은 매우 난해하므로 대신 자연어를 사용함 프로그래밍 언어 구현 프로그래밍 언어 L로 작성된 어떤 프로그램 P_L이 주어졌을 때, P_L이 L의 구문 규칙을 따르는 올바른 프로그램인지 검사하고, 올바른 경우에 P_L을 L의 의미 규칙에 따라 실행하는 프로그램을 ..

CS 2023.11.30

[자료구조] 트리

트리의 구성 노드: 트리의 항목/트리에 저장되는 데이터의 묶음 부모노드-자식노드: 상하 계층구조가 있고 직접적으로 연결된 노드들로서 상위계층의 부모 노드와 하위계층의 자식 노드를 의미함 루트 노드: 트리의 최상위 노드(부모가 없는 노드) 서브트리: 부모 노드를 삭제하면 생기는 트리들 잎 노드: 트리의 맨 끝(바닥)에 있으면서, 자신의 서브트리를 갖지 않는 노드 진입/진출 차수 루트 노드: 진입 차수 = 0 루트를 제외한 모든 노드의 진입 차수: 1 잎 노드: 진출 차수 = 0 내부 노드와 형제 내부 노드: 루트도 아니고 잎도 아닌 노드 형제: 같은 부모를 갖는 노드들 트리의 레벨 노드의 레벨: 루트로부터 그 노드까지 이어진 선(경로)의 길이 트리의 깊이: 트리의 레벨에서 가장 큰 값에 1을 더한 것 추상..

[프로그래밍 언어론] 구문 분석

어휘 분석 프로그램 분석: 문자 → (어휘 분석) → 어휘 → (구문 분석) → 구문 어휘 분석 어휘 분석의 목적: 프로그램에 사용되는 단어를 구별해 냄 토큰: 어휘 분석을 통해 얻어지는 결과 토큰과 렉심 렉심(lexeme): 프로그램에 사용되는 단어 토큰: 렉심의 집합 예약어나 연산자 등 토큰과 렉심이 같은 경우가 많으므로 통상 렉심을 토큰이라고 부르기도 함 식별자: 변수명, 함수명 등 이름을 나타내는 토큰 예약어 프로그래밍 언어 자체에 정의되어 포함된 토큰 식별자와 구문 구조는 같지만 식별자로 쓸 수 없음(사용자 재정의 불가) 파스 트리 유도(derivation) 구문 규칙을 이용하여 주어진 프로그램을 만들어 내는 과정 유도가 가능하면 문법적 오류가 없는 유효한 프로그램임 파스 트리(parse tre..

CS 2023.11.23

[프로그래밍 언어론] 구문론과 의미론

구문론과 의미론 언어의 형식적 정의 한국어: 주어 + 목적어 + 서술어 영어: 주어 + 동사 + 목적어 프로그래밍 언어의 형식적 정의 BASIC: PRINT “출력할 내용”; 변수 C: printf(”출력할 내용”, 변수); 형식적 정의의 필요성 프로그래밍 언어의 명확한 사용체계를 알려 줌 언어 해석의 모호함을 없애 줌 작성된 프로그램의 동작 예측이 가능 프로그래밍 언어의 구조 문자: 영어 알파벳과 아라비아 숫자를 근간으로 작성 어휘(토큰): 프로그래밍 언어 문자로 구성된 단어 구문: 프로그래밍 언어로 프로그램을 작성하는 규칙 프로그래밍 언어의 의미: 작성된 프로그램을 통해 발생하는 현상 프로그래밍 언어의 형식적 정의 구문론: 프로그램의 표면적인 구조를 정의 의미론: 프로그램의 내용적인 효과를 정의 구문..

CS 2023.11.22

[프로그래밍 언어론] 프로그래밍 언어 패러다임

프로그래밍 패러다임 패러다임이란 무엇인가? 한 시대의 견해나 사고를 규정하는 양식, 규범, 체계를 통칭하는 말 토머스 쿤의 책 ‘과학혁명의 구조’에서 소개한 용어 과학 분야의 큰 발전에 따라 이전 믿음이 흔들리고 대체되는 과정을 표현함 패러다임 전환의 사례 과학: 천동설 → 지동설 경제: 저축이 미덕 → 소비가 미덕 생활: 둘만 낳아 잘 기르자 → 자녀에게 가장 좋은 선물은 동생입니다. 언어: 너무 나쁘다. → 너무 좋다 (’너무’란 말의 의미가 바뀜) 프로그래밍 패러다임의 변화 프로그램을 작성하는 전형적인 방식 프로그래밍 패러다임의 변화: 주어진 데이터에 어떤 연산을 어떤 순서로 할지 결정하는 것이 중요 → 명령형 프로그래밍 패러다임 등장 복잡한 데이터 처리를 위해 데이터 처리 방식 자체를 잘 정리하는..

CS 2023.11.22

[프로그래밍 언어론] 프로그래밍 언어의 발전 및 동작원리

프로그래밍 언어의 발전 컴퓨터 시스템과 운영체제의 발전 컴퓨터 시스템의 발전 아이디어 시대: 계산 자동화를 위한 상상 속의 기계 설계(튜링 기계) 전자식 컴퓨터 등장: 전자 신호를 통한 계산 기계(모클리와 에커트의 ENIAC) 프로그램 저장 방식의 컴퓨터: 프로그램과 처리기를 분리(EDVAC) 운영체제의 발전 일괄처리 운영체제 등장: 관리자를 대신할 프로그램 등장 시분할 운영체제: 한 컴퓨터를 여러 사람이 사용 DOS: IBM 컴퓨터, Apple 등 개인용 컴퓨터 등장(DOS) PC 환경 운영체제 발전: GUI 운영체제와 Linux의 발전 1950년대: 초기 프로그래밍 언어 Fortran: 수식과 문장, 제어문의 등장 IBM의 존 배커스에 의해 개발됨 과학계산용 언어 Algol: 구조화 프로그래밍의 발전..

CS 2023.11.22

[프로그래밍 언어론] 프로그래밍 언어 소개

프로그래밍 언어란 무엇인가? 프로그래밍 언어 정의 언어의 정의 자연어는 크게 말과 글, 두 가지 형태로 존재 언어는 의사 전달 수단 언어는 한 사람의 생각을 다른 사람에게 전달하는 데 사용됨 프로그래밍 언어의 정의 프로그래밍 언어는 프로그램 작성에 사용되는 언어 프로그래밍 언어는 의사 전달 수단 주로 사람의 생각을 기계에 전달하는 데 사용됨 프로그래밍 언어의 특징 프로그래밍 언어와 자연어의 차이 방향: 자연어는 양방향이지만 프로그래밍 언어는 단방향 형식: 자연어는 말과 글 모두 쓰지만 프로그래밍 언어는 주로 글 내용: 자연어는 풍부한 내용을 전달하지만 프로그래밍 언어는 정확한 의도를 전달 프로그래밍 언어도 양방향에 사용될 때가 있음 (예: 알고리즘) 최근 프로그래밍 언어는 시각적 언어도 채택하고 있음 (..

CS 2023.11.22