티스토리 뷰

전공/컴파일러

7. Lex

KidCat 2023. 4. 5. 18:32

< 나오는 용어 >

 

  • Lex
  • Yacc

 

 


 

  • What is Lex & Yacc
  • Write Lex
  • Operator character

 


What is Lex & Yacc

 

  • Lex

Lex 는 Lexical Analyzer ( Scanner ) 생성기이다. input 으로 RE로 구성된 source specification 과 Program fragements 를 받아서 Output 으로 Program 이 나온다. 

쉽게 말해서 어떤 형식에 따라 RE를 기술해주면, 그것에 맞는 C코드 파일이 Output 으로 나온다. RE 에 대한 것이 Output으로 나오므로, 스캐너를 만들어준다고 생각하면 편하다.

 

  • Yacc

Lex 가 Scanner 를 만들어준다면 Yacc 은 parser 를 만들어준다. Scanner 에 의해서 만들어진 token 들이 Yacc으로 만든 parser 에 들어간다. 

 


Write Lex

 

  • Lex format

 

Lex format 은 위 사진처럼 구성되어있다. 3개의 section ( def / rules / user.. ) 으로 구성되어 있고 각 section 을 %% 로 구분한다. def 과 user 는 생략가능하지만, rules 는 반드시 기술되어 있어야한다. 따라서 첫번째 %% 는 반드시 존재해야 한다.

Lex Source

 

Definition

- 매크로 정의  

ex. DIGIT      [0-9]   :  [0-9] 를 rules 에서 DIGIT 로 쓰겠다.

- Import header files

 

Rules

- 왼쪽에는 RE 가 오른쪽에는 action 이 적힌다.

 

User subroutines

- 그대로 복사되는 부분이다.

 


Operator character

 

  • Operator character
    • [] : character 클래스 ex. [abc] : a ,b or c
    • - : 범위   ex. [a-z] : a,b,c,....z
    • ^ : not
    • \ : ASCII 코드로 표현한 것을 의미   ex. [\40-\176] : 아스키코드 40번~176번
    • ? : optional (선택)   ex. [ab?c] : ab or abc
    • ( ) : 그룹화
    • ^ : 문장 시작    ※ ^ 가 class ( = [ ] ) 안에 있으면 not 의 의미를 가지고, 밖에있으면 문장 시작의 의미를 갖는다.
    • $ : 문장 종료
    • { } : { } 안에 기술된 것을 def 에서 찾으라는 뜻이다

'전공 > 컴파일러' 카테고리의 다른 글

8. Context Free Grammar  (0) 2023.04.30
6. Lexical analysis (어휘 분석)  (0) 2023.04.03
5. Pumping Lemma  (0) 2023.03.27
4. Finite Automata  (1) 2023.03.21
3. Regular expression  (0) 2023.03.21