Loading [MathJax]/jax/output/CommonHTML/jax.js

Regular expression

2023. 9. 28. 05:35전공/컴파일러

Regular expressions(정규표현)

정규표현(Regular expression)

  • 정규언어를 표현하는 대수적인 방법
  • e가 정규표현이면 L(e)는 e를 정의하는 언어

정규표현의 정의

  1. a가 어떤 기호이면, a는 정규표현이고, L(a) = {a}
  2. ϵ은 정규 표현이고, L(ϵ) = {ϵ}
  3. 은 정규 표현이고, L() =

유도식

  1. r과 s가 정규 표현이면, r+s도 정규 표현이고, L(r+s)=L(r)+L(s)
    • + 대신에 | 를 쓰기도 한다.
    • L(r|s) = L(r) L(s)
    • {r, s}
  2. r과 s가 정규 표현이면, rs도 정규 표현이고, L(rs)=L(r)L(s)
    • 연결
    • {rs}
  3. r이 정규 표현이면, r도 정규 표현이고, L(r)=(L(r))
    • {r} = {ϵ, r, rr, ...}

연산자 우선순위

  • 괄호는 연산자 그룹핑에 쓰임
  • () → * → 연결 → +

※주의

  • 정규 표현은 카운팅이 불가능
    • {anban|n0}aba
  • 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