컴파일러 7

투자 대안의 경제성 분석

이 글은 (홍성조 외) 를 참고하여 만들어졌습니다일반적으로 투자 안(investment proposal)이라는 것은 투자를 고려 중인 하나의 계획이나 프로젝트를 말하는 것이다.투자 의사 결정에서는 대부분 다수의 투자 안을 놓고 선택 여부를 결정하게 된다. 투자 대안(investment alternative) : 투자 의사결정에서 선택할 수 있는 상호 배타적(mutually exclusive)이고, 완전 포괄적(totally exhaustive)인 여러 행동 방향들(course of action) 중 하나를 일컫는 말이다.=> 상호 배타적 : 반드시 하나만 선택해야 한다. (완전 포괄적 : 반드시 대안들 중 하나를 택해야 함) 즉, 의사결정을 위한 대안의 집합을 구성했다는 말은 그중 반드시 하나를 그리..

컴파일러 2025.06.10

구문 분석

이 글은 (저자: 오세만)을 참고하여 만들어졌습니다. 구문 분석이란 주어진 입력이 올바른 프로그램인가를 검사하고 다음 단계에서 필요한 정보를 구성하는 과정이다.이와 같은 작업을 수행하는 컴파일러의 단계는 구문 분석기(syntax analyzer)이다. 구문 분석기는 간단히 파서(parser)라 부르며, 스캐너에 의해 생성된 토큰을 입력으로 받아 문법적인 검사를 한 후에 다음 단계인 중간 코드 생성기가 효과적으로 중간 코드를 생성할 수 있는 형태의 정보를 구성하여 출력한다. 6.1 구문 분석 방법유도 트리(derivation tree) : 구문 분석기의 출력으로 생성되는 트fl=> 이 트리가 구문 분석기에 의해 생성될 때는 파스 트리(parse tree) Context-free 문법을 위한 구문 분석 방..

컴파일러 2025.06.05

Context-free 문법

이 글은 (저자: 오세문)을 참고하여 만들어졌습니다.프로그래밍 언어의 구문 구조를 명시하는데 context-free 문법이 널리 사용되어 왔다.또한 context-free 문법은 효율적이고 잘 정의된 구문 분석 알고리즘을 가지기 때문에 프로그래밍 언어의 문법적인 표현이나 번역에 매우 중요하다. 정규 문법은 프로그래밍 언어의 구문 구조를 표현하기에는 너무 제약이 많아 부적합하다.대부분의 경우 토큰의 구조는 정규 표현으로 나타내지만 프로그래밍 언어의 구조는 context-free 문법을 사용한다. 장점1. 간단하고 이해하기가 쉽다.2. 표현된 문법으로부터 자동적으로 인식기를 구현할 수 있다.3. 입력된 프로그램의 구조를 생성 규칙에 의해 분해할 수 있으므로 번역에 유용하다. context-free 문법은 ..

컴파일러 2025.06.04

어휘 분석

이 책은 (저자: 오세만)을 참고하여 만들어졌습니다.4.1 서론3장에서 다루었던 정규 언어에 관한 이론을 적용하여 이 장에서는 구체적으로 어휘 분석기를 구현하는 방법을 살펴보자 어휘 분석(lexical analysis) : 소스 프로그램을 하나의 긴 문자열로 보고 차례대로 문자를 검조(scanning)하여 문법적으로 의미있는 최소의 단위로 분할해 내는 것을 말하는데 이 문법적인 단위(syntactic entity)를 토큰(token)이라 부른다.이러한 작업은 컴파일러의 어휘 분석기(lexcial analyzer)에서 처리하는데 어휘 분석기는 간단히 스캐너(scanner)라 부른다.토큰은 유한 오토마타에 의해 인식될 수 있으며, 토큰의 구조는 프로그래밍 언어 설계자(language designer)나 컴파..

컴파일러 2025.06.04

정규언어(후반부)

이 글은 을 참고하여 만들어졌습니다. 3.3.4 DFA의 상태수 최소화DFA의 상태수 최소화(state minimization)는 DFA를 이용하는 어휘 분석기의 상태 전이표의 크기를 줄임으로써 기억 공간을 적게 차지하도록 하고 또한 어휘 분석 프로그램을 간단히 하는데 큰 도움을 준다.상태수를 최소화하는 방법은 등치 관계(equivalence relation)을 이용하여 상태들을 합침(state merge)으로써 상태수를 최소화하는 것이다.따라서 구별되지 않는 상태들은 같은 형태의 입력 스트링을 인식하기 때문에 모두 합칠 수 있다.다음은 동치 관계를 이용하여 구별되지 않는 상태들을 하나의 상태로 합치는 방법이다. DFA의 상태 집합을 동치 관계에 의해 분할하고 각 동치류를 최소화한 유한 오토마타 상태(Q..

컴파일러 2025.06.03

컴파일러의 기초: 형식 언어와 문법 파헤치기 💻

컴파일러를 공부하다 보면 '형식 언어', '문법'과 같은 낯선 용어들을 마주하게 됩니다. 처음에는 어렵게 느껴질 수 있지만, 이 개념들은 컴파일러가 프로그래밍 언어를 이해하고 처리하는 방식의 핵심을 이루고 있습니다.이번 포스팅에서는 컴파일러 학습의 기초가 되는 형식 언어(Formal Language) 와 문법(Grammar) 에 대해 쉽고 자세하게 알아보겠습니다. 1. 언어(Language)란 무엇일까요? 🤔형식 언어 이론에서 '언어'는 우리가 일상적으로 사용하는 자연어와는 조금 다른 의미를 갖습니다. 특정 규칙에 따라 심벌(Symbol) 들을 조합하여 만든 스트링(String) 들의 집합을 의미하죠. [9, 29, 30, 42]기본 개념부터 살펴볼까요?알파벳 (Alphabet, T): 언어를 구성하는..

컴파일러 2025.04.15

👨‍💻 컴파일러란 무엇인가? -

프로그래밍 언어를 공부하다 보면 자연스럽게 마주치는 개념이 컴파일러입니다. 하지만 컴파일러가 정확히 무엇인지, 어떻게 작동하는지에 대해서는 막연한 경우가 많죠. 이번 글에서는 컴파일러의 개념부터 구조, 자동화 도구까지 차근차근 정리해 보겠습니다.🎯컴파일러란?A compiler is a computer program which translates other programs written in a particular high-level programming language into executable code for a specific target computer.컴파일러(Compiler)란 고급 프로그래밍 언어로 작성된 소스 코드를 기계어로 변환해 실행 가능한 형태로 만드는 프로그램입니다. 다시 말해, ..

컴파일러 2025.04.14