Regular expression
2023. 9. 28. 05:35ㆍ전공/컴파일러
Regular expressions(정규표현)
정규표현(Regular expression)
- 정규언어를 표현하는 대수적인 방법
- e가 정규표현이면 L(e)는 e를 정의하는 언어
정규표현의 정의
- a가 어떤 기호이면, a는 정규표현이고, L(a) = {a}
- ϵ은 정규 표현이고, L(ϵ) = {ϵ}
- ∅은 정규 표현이고, L(∅) = ∅
유도식
- r과 s가 정규 표현이면, r+s도 정규 표현이고, L(r+s)=L(r)+L(s)
- + 대신에 | 를 쓰기도 한다.
- L(r|s) = L(r) ∪ L(s)
- {r, s}
- r과 s가 정규 표현이면, rs도 정규 표현이고, L(rs)=L(r)L(s)
- 연결
- {rs}
- r이 정규 표현이면, r∗도 정규 표현이고, L(r∗)=(L(r))∗
- {r}∗ = {ϵ, r, rr, ...}
연산자 우선순위
- 괄호는 연산자 그룹핑에 쓰임
- () → * → 연결 → +
※주의
- 정규 표현은 카운팅이 불가능
- {anban|n≥0}≠a∗ba∗
- pumping lemma를 통해 정규 표현이 아님을 증명
정규 표현에 대한 대수 법칙
- (α+β)+γ=α+(β+γ) (+ 에 대한 결합 법칙)
- (αβ)γ=α(βγ) (접속에 대한 결합 법칙)
- α+β=β+α (+ 에 대한 교환 법칙)
- α+α=α
- α(β+γ)=αβ+αγ (분배법칙)
- (β+γ)α=βα+γα (분배 법칙)
- εα=α=αε (접속 연산의 항등원)
- α∗=ε+αα∗
- (α∗)∗=α∗
'전공 > 컴파일러' 카테고리의 다른 글
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 |