Computer Engineering(39)
-
[알고리즘] 5. Greedy
1. Greedy 알고리즘이란?개념- 현재 순간에 최적이라고 생각되는 선택을 반복하며 문제를 해결하는 방식- 과거의 선택이나 미래 결과는 고려하지 않음- 단순해 보이지만, 특정 문제에서는 매우 효율적이고 최적해를 보장함 구조선택 selection : 현재 가장 좋아 보이는 항목 선택유효성 확인 feasibility check: 지금까지 선택한 것들이 전체 해결 가능성 있는지 검사해결 여부 확인 solution check: 현재 선택 집합이 전체 문제의 해인지 확인 예제 - 동전 거스름돈 문제 (coin change problem): 금액 n을 최소 개수의 동전 {25, 10, 5, 1}로 표현하기 ex) 30 -> 25+5 - Brute-force 방식: 가능한 모든 조합 다 시도해보기, 매우느림 -> ..
2025.04.15 -
[프로그래밍 언어론] 7. 이름, 바인딩, 영역
1. 변수와 언어의 기본 개념 변수란?- 명령형 언어에서 변수는 폰 노이만 구조의 '메모리 셀' 추상화임- 함수형 언어의 변수는 변경 불가능한 '상수'에 가까움.- 중요한 속성: 타입, 영역(scope), 수명(Lifetime) 2. 이름과 특수어 이름- 변수, 함수, 매개변수 등 구분을 위한 문자열- C99: 내부 이름 63자 의미 / 외부 이름 31자 제한- C++, JAVA, C#: 사실상 제한 없음 표기법 예시 CamelCase: myStackPascalCase: MyStacksnake_case: my_stackkebab-case: my-stack (주로 URL, CLI에서 사용)Hungarian Notation: strName, iCount언어별 특징 PHP: $namePerl: $, @, %..
2025.04.15 -
[프로그래밍 언어론] 6. 어휘분석과 구문분석2
1. 의미론정의: 프로그램 실행 시 "무슨 일이 일어나는지"를 기술하는 것표현방식: 자연어로 표현 가능하지만 모호성 존재 → 형식 의미론으로 보완대표적인 형식 의미론: 추상기계코드 방식, 수학적 정의 방식 등 분류정적 의미론프로그램 실행 전에 의미 확인 (ex. 타입 검사 등)동적 의미론 프로그램 실행 중 의미를 설명 (기능적, 표기적, 공리적 의미론 포함) 2. 속성 문법 (Attribute Grammar)- 의미론적 정보를 문맥자유문법(CFG)에 부가하는 형식적 구조- 1968년 도널드 커누스 제안- 주요 목적: 문법 구조와 의미 연결 (컴파일러 설계에서 핵심) 핵심 구성 요소기본 문맥자유문법 (CFG)구문 구조 정의속성(Attribute)터미널, 논터미널과 연관된 값 (ex. 정수, 문자열 등) 속..
2025.04.14 -
[프로그래밍 언어론] 5. 어휘분석과 구문분석
1. 컴파일러의 전처리는 왜 중요할까?컴파일러의 초기 단계에서 가장 핵심이 되는 두가지 작업은 바로 어휘분석과 구문분석이다.이 두 과정은 우리가 작성한 텍스트 기반의 소스 코드를 컴파일러가 이해할 수 있도록 구조화하는 과정이다.- 어휘분석기: 코드 문자열을 토큰이라는 단위로 분해- 구문분석기: 토큰의 나열을 기반으로 구문트리(parser tree) 생성→ 이 전처리 두 단계는 문법 오류를 미리 잡아내고, 컴파일러 뒷단에 전달할 구조를 준비하는 역할을 한다. 2. 어휘분석: 필수적으로 패턴 매칭기이다. 주어진 문자열에서 주어진 문자패턴과 일치하는 부분 문자열을 찾는다. 역할- 입력 문자열 → 토큰 열 생성- 심볼 테이블 작성: 식별자, 예약어 등의 정보 기록- 오류 검출: 불법 문자, 잘못된 수치 리터럴 ..
2025.04.13 -
[프로그래밍 언어론] 4. 구문과 의미론
1. 구문과 의미란?프로그래밍 언어는 단순한 문자열이 아니라 의미 있는 구조와 해석이 가능한 표현이다.- 구문(Syntax): 프로그램이 어떤 모양이어야 하는가? - 형식적 구조- 의미(Semantics): 프로그램이 무엇을 의미하는가? - 실행 시 동작 2. 언어의 구성요소알파벳(Σ): 유한한 심볼의 집합 ex) {a, b}문자열(String): 알파벳의 유한한 나열 ex) abab공집합∅: 아무 문자열도 포함하지 않는 언어빈 문자열 λ: 길이 0의 문자열언어 Language: Σ*의 부분집합, 즉 문자열들의 집합→ 모든 프로그래밍 언어도 결국 문자열의 집합이다. 이를 생성하기 위한 도구가 문법(Grammar)이다. 문법의 구성요소G = (V, T, S, P)V: 변수(비단말 기호 Nonterminal..
2025.04.12 -
[프로그래밍 언어론] 3. 프로그래밍 패러다임
1. 함수형 프로그래밍 언어대부분의 전통적인 언어(Fortran, C, Java 등)는 폰 노이만 구조를 따른다. - 메모리(변수)와 연산이 분리되어 있다. - 상태(state)가 프로그램의 핵심 구성 요소- 명령 순서에 따라 동작이 달라질 수 있다. 폰 노이만 구조의 문제점- 명령 중심 + 상태 기반 → 디버깅 어려움- 부작용(side effects) → 추론 불가능성 증가- 데이터 전송 병목 현상 → 속도 저하 그래서 등장한 대안이 함수형 프로그래밍(FP) 이다. 수학함수: 수학 함수는 항상 같은 입력과 같은 출력을 나타내는 순수 함수 (pure function)이다. 함수는 매개변수와 인수만 사용하고, 부작용이 없고, 참조투명성을 가진다. 이러한 수학함수의 순수성을 프로그래밍에 도입한 것이 함수..
2025.04.12