{Lecture}/Compiler7 [컴파일러] BNF 정리 BNF (Backus–Naur Form)란 BNF는 프로그래밍 언어의 문법(Grammar) 을 형식적으로 표현하기 위한 표기법(Notation)을 말한다. 컴파일러의 구문 분석(Parsing) 의 근간이 된다. 프로그래밍 언어의 문법 구조를 분명하고 간결하게 표현할 때 주로 사용된다. 1950년대 후반에 존 배커스(John Backus)와 피터 나우어(Peter Naur)가 개발한 방법이라 'Backus-Naur Form'이라 부르게 되었다. BNF 표현 방법 ::= 표현식 BNF 예시 ::= + | - | ::= * | / | ::= ( ) | ::= 0 | 1 | 2 | 3.. 2025. 10. 23. [컴파일러] 촘스키 언어 계층 정리 - 문법 정리 Chomsky Grammar Hierarchy 문법을 표현 능력(Grammar Power)과 제약(Restrictions)에 따라 네 가지 계층으로 나눈 구조로, 안쪽에서 바깥쪽으로 갈수록 제약이 줄고, 표현 능력이 강해진다. 1. Type-3 Grammar (Regular Grammar, 정규 문법)가장 단순한 문법정규 표현식(Regular Expression)으로 표현 가능유한 오토마타(FA, Finite Automaton)로 인식 가능예: 이메일 형식, 전화번호 패턴 2. Type-2 Grammar (Context-Free Grammar, 문맥 자유 문법)정규 문법보다 강력푸시다운 오토마타(PDA)로 인식 가능프로그래밍 언어 문법 대부분이 여기에 속함 (if-else, 중첩 구조 등)예:.. 2025. 10. 23. [컴파일러] 컴파일러의 구조 (Front-End와 Back-End 구성과 역할) 컴파일러의 구조 컴파일러는 Front-end (전단부) 와 Back-end (후단부) 로 나뉜다.Front-end → 소스코드의 의미를 분석하고, 중간 표현(IR)을 생성하는 부분Back-end → IR을 최적화하고, 실제 기계어 코드로 변환하는 부분 컴파일러의 컴포넌트 컴파일러의 컴포넌트는 다음과 같이 나눠진다 1. Lexical Analyzer (어휘 분석기)문자 스트림(character stream)을 읽고, 토큰(token)으로 나눔 → a = b + c; → , , , , Token stream2. Syntax Analyzer (구문 분석기)토큰을 문법에 맞게 트리 구조로 분석 → 구문 트리(syntax tree) 생성. 즉, 프로그램의 구조(문법적 계층)를 파악함.Syntax.. 2025. 10. 23. [컴파일러] NFA -> DFA 변환 Deterministic Finite Automata (DFA)어떤 상황에서도 이동(transition)을 선택할 여지가 없다.→ 즉, 현재 상태와 입력 기호가 주어지면 다음 상태가 단 하나로 결정된다.→ “결정적(Deterministic)”이라는 말은 바로 이 뜻이다. Non-deterministic Finite Automata (NFA)적어도 한 경우에서 다음 상태로 가는 선택지가 여러 개일 수 있다.→ 즉, 같은 상태에서 같은 입력 기호로 여러 개의 전이(transition) 가 가능하거나,→ ε(엡실론) 전이처럼 입력 없이 이동하는 경우가 있을 수 있다.입력 문자열을 받아들인다는 것(accept) 은→ 여러 가능한 경로 중 하나라도 최종 상태(final state)에 도달할 수 있다면 Accept.. 2025. 10. 23. [컴파일러] 컴파일러란? 컴파일러란? 컴파일러란 무엇일까? 컴파일러는 개발자라면 무조건 들어봤을 용어이다. 컴파일러를 단순히 실행 코드를 만들어주는 프로그램이라고 이때까지 생각했었다. 하지만 컴파일러를 더욱 정확하게 말한다면 다음과 같이 설명할 수 있다. 컴파일러(Compiler)란 개발자가 작성한 고급 언어(C, Java, Python 등) 로 된 프로그램을 컴퓨터가 이해할 수 있는 저급 언어(기계어 또는 어셈블리어) 로 번역(translate) 해주는 프로그램이다. 개발자가 작성한 코드는 그대로는 컴퓨터가 이해하지 못한다. 그래서 컴파일러가 이 코드를 읽고, 구문 분석(syntax analysis) 과 의미 분석(semantic analysis) 등을 거쳐 기계어 코드로 변환한다. 이때 컴파일러는 단순히 코드를 변환.. 2025. 10. 22. [컴파일러] 3주차 Grammar Basic 보호되어 있는 글 입니다. 2025. 9. 16. [컴파일러] Programming Language Basics 보호되어 있는 글 입니다. 2025. 9. 11. 이전 1 다음