[컴파일러개론] syntax_derication (구문과 유도)
·
CS/컴파일러개론
구문분석이란?어휘분석기가 생성한 토큰을 기반으로 구문분석기(파서)가 문법이 맞는지 확인하고, 각 단어의 역할을 확인하여 파스트리를 만드는 것을 syntax analysis 즉 구문분석이라고 한다. 프로그래밍 언어 제작자가 문법을 기술하는 방법 CFG(Context Free Grammar)언어의 문법을 정의하는 일반적인 방법이다. 간단하고 이해하기 쉬우며, 표현된 문법으로부터 자동적으로 인식기를 구현 가능하다. G = (N, T, P, S)N: non terminal 심벌 집합 (중간 과정 심벌)T: terminal 심벌 집합P: 생성 규칙 집합S: 시작 심벌L(G): 이 문법으로 생성되는 language 문법 심벌들Terminal 심벌 (T)a,b,c와 같은 알파벳 시작 부분의 소문자와 숫자 0,1,..
[컴파일러개론] Lexical Analysis (어휘분석)
·
CS/컴파일러개론
어휘분석이란?원시 프로그램을 긴 문자열로 보고 차례대로 문자를 검사하여, 의미 있는 최소 단위들로 변환하는 것이다. space 같은 것들을 제거하여 코드의 크기도 줄인다. 이때 문법적으로 의미있는 최소 단위를 토큰(Token)이라 한다.식별자: x, y123, ...키워드: if, else, while, for, ...상수: 2, 1000, -20, 2.0, -0.01, ...연산자: +, *, {, ++, 문자열: "x", ... 프로그래밍 언어 제작자가 토큰을 기술하는 방법프로그래밍언어 제작자는 정규표현식 (regular expression)을 사용해서 토큰을 설명한다.a: 일반 문자ε: 빈 스트링R|S: R이거나 S일 때RS: R 다음에 S가 나올 때R+: R이 1번 이상 나올 때R*: R이 0..
[컴파일러개론] 개요
·
CS/컴파일러개론
개요- 컴퓨터의 언어인 2진수를 사용하면, 모든 프로그램이 0과 1의 전쟁이므로 불편함- 어셈블리를 사용하면 2진수를 사용하지 않고 기호로 표기할 수 있으나, CPU가 달라지면 코드를 다시 짜야하는 불편함이 존재 이러한 이유로 고급언어가 탄생했다. 고급언어는 0/1 신경쓰지 않고, 기계마다 다르지도 않고 영어와도 비슷하다. 단 이를 번역하는 프로그램이 조금 복잡한 일을 해야하는데, 이때 번역기를 '컴파일러'라고 한다. (꼭 기계어로만 번역되는 것은 아님) 컴파일러란?한 언어로 쓰여진 프로그램(source program)을 읽어서 다른 언어로 된 의미가 같은 프로그램(target program)으로 번역해주는 프로그램을 말한다. - 고급언어를 저급언어로 번역하면 Compiler- 동일 언어로 옮기면 R..