Compiler

Lexical Analysis

Gauss1 2021. 10. 8. 01:43

Tocken 단위로 나눔

 

    Regular
Expressions
   
       
    Lexer
Generator
   
       
Source Lexer
(Finite
Automata)
Streams of Tokens

 


Finite automata (FSM: Finite State Machine)

state 갯수가 finite

start state는 한개


Regular Expressions

Base Cases:

- Symbol

- Epsilon: empty string

 

Induction Cases

- Alternation(M|N)

- Concatenation(MN)

- Repetition(M*) => including zero

 


How lexer generator make Lexer from REs?

 

1. change REs to finite autometa(NFA)

2. Link multiple NFA with empsilon or duplicated labels => make one NFA

3. Make each uniquely labeled => make DFA

 

DFA(Deterministic Finite Autometa):  node가 unique하고 epsilon이 없음

NFA(Non-deterministic Finite Autometa): node가 unique하지 않고 epsilon도 있음

=> computer는 DFA만 이해 가능하며 RE를 DFA로 바로 바꾸는 것은 어렵기 때문에 중간에 NFA state를 거침


NFA to DFA conversion

edge(s, a)

closure(S). e_closure(S): e으로 연결된 애들은 한 node로 봄

DFAedge(D,a)

 

state s1,s2가 둘다 final이거나 no final인 경우 모든 c에 대해 trans[s1.c] = trans[s2,c]이며 합칠 수 있음

 

Longest match

Rule priority

 

'Compiler' 카테고리의 다른 글

Register Allocation  (0) 2021.11.04
Alias Analysis  (0) 2021.11.04
Dataflow Analysis  (0) 2021.11.03
Syntax Analysis  (0) 2021.10.08
Intro  (0) 2021.10.08