Regular expression
2023. 9. 28. 05:35ㆍ전공/컴파일러
Regular expressions(정규표현)
정규표현(Regular expression)
- 정규언어를 표현하는 대수적인 방법
- e가 정규표현이면 L(e)는 e를 정의하는 언어
정규표현의 정의
- a가 어떤 기호이면, a는 정규표현이고, L(a) = {a}
- $\epsilon$은 정규 표현이고, L($\epsilon$) = {$\epsilon$}
- $\varnothing$은 정규 표현이고, L($\varnothing$) = $\varnothing$
유도식
- r과 s가 정규 표현이면, r+s도 정규 표현이고, $L(r+s) = L(r) + L(s)$
- + 대신에 | 를 쓰기도 한다.
- L(r|s) = L(r) $\cup$ L(s)
- {r, s}
- r과 s가 정규 표현이면, rs도 정규 표현이고, $L(rs) = L(r)L(s)$
- 연결
- {rs}
- r이 정규 표현이면, $r^*$도 정규 표현이고, $L(r^*) = (L(r))^*$
- {r}$^*$ = {$\epsilon$, r, rr, ...}
연산자 우선순위
- 괄호는 연산자 그룹핑에 쓰임
- () → * → 연결 → +
※주의
- 정규 표현은 카운팅이 불가능
- $\{ a^nba^n | n\ge 0\} \not= a^*ba^*$
- pumping lemma를 통해 정규 표현이 아님을 증명
정규 표현에 대한 대수 법칙
- $(\alpha + \beta) + \gamma = \alpha + (\beta + \gamma)$ (+ 에 대한 결합 법칙)
- $(\alpha\beta)\gamma = \alpha(\beta\gamma)$ (접속에 대한 결합 법칙)
- $\alpha + \beta = \beta + \alpha$ (+ 에 대한 교환 법칙)
- $\alpha + \alpha = \alpha$
- $\alpha(\beta + \gamma) = \alpha\beta + \alpha\gamma$ (분배법칙)
- $(\beta + \gamma)\alpha = \beta\alpha + \gamma\alpha$ (분배 법칙)
- $\varepsilon\alpha = \alpha = \alpha\varepsilon$ (접속 연산의 항등원)
- $\alpha^* = \varepsilon + \alpha\alpha^*$
- $(\alpha^*)^* = \alpha^*$
'전공 > 컴파일러' 카테고리의 다른 글
Lex (0) | 2023.09.28 |
---|---|
Lexical analysis (0) | 2023.09.28 |
Finite Automata (0) | 2023.09.28 |
Formal Language, Grammar and Automata (0) | 2023.09.28 |
Introduction to Compiler (0) | 2023.09.28 |