[오토마타] 7. Regular Expression

2024. 10. 23. 03:01·CS/오토마타
반응형

지금까지 DFA에 대해서 정리하면서, DFA로 표현할 수 있는 언어를 regular language 라고 했었다.

이때, 모든 NFA는 DFA로 변환이 가능하기 때문에 NFA로 표현할 수 있는 언어 역시 regluar language 였다.

DFA로 표현가능한 언어가 regular language 라면, 거꾸로 regular language 는 DFA로 표현이 가능하다.

 

 

따라서 위 그림과 같은 관계가 성립한다.

이번 글에서는 regular language를 나타내는 또 다른 방법인 regular expression 에 대해 정리해본다.

 

regular expression 은 다음 3가지 내용으로 정의된다.

 

1. φ, λ, a ∈ Σ (알파벳에 포함되는 하나의 심볼) 3가지는 모두 regluar expression 이다.

이 regluar expression 들을 가리켜 primitive regular expression 이라고 부른다.

 

2. 만약 r₁ 과 r₂ 가 regluar expression 이라면 다음도 모두 regluar expression 이다.

r₁ + r₂, r₁ · r₂, r₁*, (r₁)

 

3. 2에서 정의한 기호를 유한번 사용해서 만들 수 있는 문자열은 regular expression 이다.

 

 

이 사진은 regular expression 의 한 가지 예를 보여준다.

우선 의미보다는 이렇게 생긴 것이 regular expression 이라는 것만 기억하자.

 

 

이 표현은 regular expression 이 아니다.

+ 기호를 사용하려면 그 양 옆 regular expression 이 존재해야 한다.

 


 

regular expression 은 regular language 를 나타내는 또 다른 방법이라고 했었다.

이를 일반화하여, regular expression r 을 사용하여 나타내는 언어를 가리켜 L(r) 이라고 한다.

(L(G), L(M) 이어서 r 을 통해서 L을 나타내는 것이다.)

 

이제 위에서 정리한 regular expression 기호들의 의미를 정리해보자.

 

φ : 공집합

λ : { λ }

 

공집합은 기계로 보면 어떠한 문자열도 문장으로 받아들이지 않는 것을 의미한다.

(기계로는 transition 이 없는 non-final state로 이루어진 기계를 생각하면 된다.)

 

반면 { λ } 는 '빈 문자열' 이라는 문자열은 문장으로 받아들이겠다는 것을 의미한다.

(기계로는 transition 이 없는 final state 하나로 이루어진 기계를 생각하면 된다.)

 

a : Σ 에 속하는 모든 a 에 대해 { a } 는 a 하나만을 문장으로 갖는 언어라고 생각할 수 있다.

 

 

두 regular expression 에 대해서는 위와 같이 나타낼 수 있다.

L 은 '집합' 이라는 것을 기억하자.

 

r1 + r2 라는 regular expression 으로 나타내는 언어는 L(r1) ∪ L(r2) 와 같으며,

r1 · r2 라는 regular expression 으로 나타내는 언어는 L(r1)L(r2) 와 같다. (concatenation)

(r1) 은 그대로 괄호를 벗기면 되고, r1* 는 L(r1) 의 star closure 과 같다.

(언어에서 * 를 붙이는 것은 문장을 안가져오거나 (= λ), 하나만 가져오거나, 2개를 가져와서 서로 붙이거나, ... 하는 경우를 모은 것이다.)

 

 

간단한 예시를 보면, a * · (a+b) 라는 regular expression 을 통해 만드는 언어는 위와 같이 전개할 수 있다.

 

 

연습 문제

 

이 정규표현식으로 만들어지는 언어를 집합 표현으로 작성해보자.

 

(a+b)* 는 a 또는 b 로 구성된 모든 종류의 문자열을 말한다.

이 뒤에 a 또는 bb 를 붙이는 것이 이 정규표현식으로 나타낼 수 있는 언어이다.

 

 

다음으로 이 regular expression 이 나타내는 언어를 집합 기호로 작성해보면

(aa) 를 0번 이상 사용하고, 그 뒤에 (bb) 를 0번 이상 사용하고, 그 뒤에 b 를 붙인 문자열이 문장이 되는 언어이다.

따라서

{ b, aab, aaaab, .... , bbb, bbbbb, ...., aabbb, aaaabbbbb, .... } 와 같은 문자열을 문장으로 갖는다.

 

이를 조합하면 a를 짝수번 사용하고, b를 홀수번 사용해서 나타내는 문장이 되겐다.

 

 

 

이번엔 거꾸로 집합 기호로 문장이 주어졌을 때, 이 언어를 나타낼 수 있는 정규표현식을 찾아보자.

위 기호는 0, 1 로 구성된 문장 w 중에서, 0이 한번이라도 연속적으로 등장해야하는 문자열을 문장으로 갖는 언어를 나타낸다.

 

위와 같이 나타낼 수 있다.

 

 

이번엔 반대로 연속적인 0이 없어야 한다는 조건을 나타내고 있다.

이 문제는 여러가지 풀이가 있다.

 

이렇게 2가지 풀이를 생각할 수 있다.

(답은 무한가지다. 하나의 언어를 표현할 수 있는 DFA가 무수히 많은 것처럼)

 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'CS > 오토마타' 카테고리의 다른 글

[오토마타] 9. Regular Grammar  (0) 2024.10.23
[오토마타] 8. Regular Expression 과 Regular Language  (0) 2024.10.23
[오토마타] 6. FA 에서 state 개수 줄이기  (0) 2024.10.22
[오토마타] 5. NFA (Nondeterministic Finite Accepter)  (0) 2024.10.20
[오토마타] 4. DFA (Deterministic Finite Accepter)  (0) 2024.10.17
'CS/오토마타' 카테고리의 다른 글
  • [오토마타] 9. Regular Grammar
  • [오토마타] 8. Regular Expression 과 Regular Language
  • [오토마타] 6. FA 에서 state 개수 줄이기
  • [오토마타] 5. NFA (Nondeterministic Finite Accepter)
에버듀
에버듀
개발은 좋은데 뭘로 개발할까
  • 에버듀
    Blog. 에버듀
    에버듀
  • 전체
    오늘
    어제
    • 분류 전체보기 (615)
      • 개인 프로젝트 (43)
        • 토이 프로젝트 (3)
        • [2020] 카카오톡 봇 (9)
        • [2021] 코드악보 공유APP (22)
        • [2022] 유튜브 뮤직 클론코딩 (9)
        • [2025] 한글 SQL 데이터베이스 (0)
      • 팀 프로젝트 (22)
        • [2020] 인공지능 숫자야구 (4)
        • [2022] OSAM 온라인 해커톤 (10)
        • [2024] GDSC 프로젝트 트랙 (6)
        • [2025] 큰소리 웹 페이지 (2)
      • CS (335)
        • 자료구조 (19)
        • 어셈블리 (41)
        • 멀티미디어응용수학 (7)
        • 컴퓨터 구조 (29)
        • 알고리즘 분석 (4)
        • 컴퓨터 네트워크 (38)
        • 프로그래밍언어론 (15)
        • HCI 윈도우즈프로그래밍 (26)
        • 기초데이터베이스 (29)
        • 운영체제 (23)
        • 오토마타 (24)
        • 문제해결기법 (11)
        • 블록체인 (22)
        • 소프트웨어공학 (21)
        • 기계학습심화 (12)
        • 컴퓨터그래픽스와 메타버스 (8)
        • 분산시스템특론 (6)
      • 자기계발 (45)
        • 생각 정리 (23)
        • 대외활동 (11)
        • 동아리 (7)
        • 자격증 (3)
        • 머니 스터디 (1)
      • 알고리즘 (PS) (107)
        • BOJ (101)
        • Programmers (5)
        • 알고리즘 이모저모 (1)
      • WEB(BE) (8)
        • express.js (1)
        • Spring & Spring Boot (7)
      • WEB(FE) (2)
        • html, css, js (1)
        • React.js (1)
      • Tool & Language (6)
        • Edit Plus (1)
        • Git (1)
        • Python3 (2)
        • Java (2)
      • Infra (12)
        • AWS (1)
        • Oracle Cloud (8)
        • Firebase (2)
        • Network (1)
      • Android (18)
        • Java (6)
        • Flutter (12)
      • Window (2)
        • Visual Studio 없이 WPF (1)
        • MFC (1)
      • 독서 (14)
        • Inside Javascript (7)
        • Database Internals (6)
        • 한 글 후기 (1)
  • 링크

    • github
    • website
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
에버듀
[오토마타] 7. Regular Expression
상단으로

티스토리툴바