[오토마타] 13. Context-Free Language

2024. 12. 4. 11:43·CS/오토마타
반응형

Context-Free Language

L = { aⁿbⁿ : n ≥ 0 }

 

위 언어는 펌핑 레마를 통해 RL이 아님을 증명한 적이 있다.

그런데 이 언어는 프로그래밍 언어에서 등장하는 언어로 표현할 수 있다.

homomorphism을 이용하여 h(a) = '(', h(b) = ')' 로 표현하면 위 언어는 언제나 올바른 괄호 문자열이 된다.

(강의록에서는 nested programming language 라고 표현하였다.)

 

그런데 우리는 분명 이런 언어도 표현하기를 원할 때가 있다.

따라서 RL 보다 더 넓은 범위를 커버할 수 있는 언어를 새로 정의해보려고 한다.

 

그리고 그 시작으로 Context-Free Language를 먼저 정의해보자.

 

Def. 만약 G = (V, T, S, P) 를 구성하는 모든 production 들이 A → x , (A는 변수 하나, x는 터미널 또는 변수들의 무작위 나열) 이라면, 이 문법은 Context-Free 하다.

 

말로 쉽게 풀었으나, production 의 정의를 수학적으로는 다음과 같이 표현한다.

 

 

x는 V와 T의 합집합에 대한 star-closure 이므로, 아무것도 나열하지 않거나( = λ), 임의의 변수와 터미널을 자유롭게 섞어써서 표현한 형태로 나타낸 것을 말한다.

사실상 context-free grammar는 모든 production 들에 대해 화살표 왼쪽이 1개의 변수로만 구성되어있으면 Context-Free 한 것이나 마찬가지다.

그리고 어떤 언어를 Context-Free Grammar(CFG)로 표현할 수 있다면 L(G)를 Context-Free Language 라고 한다.

 

 

위와 같이 모든 변수가 오른쪽에 몰려있는 문법을 Right-Linear Grammar 라고 한적이 있다.

이 문법은 CFG보다 더 제약조건이 붙은 문법이므로, CFG가 더 포괄적이라는 것을 알 수 있다.

다르게 말하면 Right-Linear Grammar는 CFG이기도 하다.

 

 

 

결론적으로는 위와 같이 모든 RL은 CFL에 속한다고 표현할 수 있다.

 

Example

 

위 문법은 CFG 일까?

CFG는 문법의 production 들에서 화살표 왼쪽이 하나의 변수로 구성되어있는지만 보면 된다.

화살표의 오른쪽은 어떻게 표현해도 상관이 없기 때문이다.

모든 production 의 화살표 왼쪽이 하나의 변수로만 구성되어 있으므로 이 문법은 CFG이고, 따라서 L(G)=CFL 이다.

 

이 문법이 만드는 문장은 abba, aaaaaa, aabbaa 와 와 같은 문장을 만든다.

이를 집합 기호로 표현하면 L = { wwᴿ : { a, b }* ∋ w } 로 표현할 수 있다.

그리고 이 언어는 RL가 아님을 펌핑 레마를 통해 증명했었다.

 

 

이 productions 로 구성된 문법은 CFG일까?

역시 화살표 왼쪽이 한 개의 변수로 구성되었는지만 보면 되니, CFG임을 어렵지 않게 알 수 있다.

이 문법이 만들어내는 문장을 보면 abbba, aabbab 와 같은 문장을 만든다.

 

이때 유도 과정을 적어보면 S => abB => abbbAa => abbbaaBba => .. 가 반복되다가 마지막에 A가 람다가 되는 순간 끝난다.

이를 계속 유도해보면 abB 이후에 B를 기준으로 왼쪽에 bbaa 가 붙고, 오른쪽에 ba가 반복해서 붙는 것을 알 수 있다.

 

S =>* ab(bbaa)ⁿB(ba)ⁿ => ab(bbaa)ⁿbba(ba)ⁿ 으로 표현할 수 있다.

 

 

 

따라서 위 문법이 나타내는 언어는 위와 같으며, 이 문장은 RL가 아니다. bbaa 의 개수와 ba의 개수를 추적해서 같다는 것을 유지해야 하기 때문이다.

 

 

그리고 이 예제까지 보면, CFG, Linear Grammar, RG는 위와 같은 포함 관계를 갖는 것을 알 수 있다.

Linear Grammar는 화살표 오른쪽에 있는 변수의 개수가 1개 이하인 production으로만 구성된 문법을 말한다.

위 예시 5.1, 5.2 가 나타내는 문법이 모두 해당하며 이를 통해 Linear Grammar는 RG는 아닐 수 있음을 알 수 있다.

반면 RG는 모두 Linear Grammar로 표현된다.

 

 

주어진 언어가 CFL 임을 증명하는 문제이다.

정의를 이용해 CFG로 이 언어를 만들면 증명에 성공할 것이다.

 

문법은 다음과 같이 구성할 수 있다.

 

S → AT | TB

A → aA | a

B → bB | b

T → aTb | λ

 

그리고 이 문법을 구성하는 productions 이 모두 화살표 오른쪽에 한 개의 변수를 가지므로, CFG이다.

따라서 이 언어는 CFG로 표현할 수 있기 때문에 CFL이다.

 

 

마지막으로 5.4 를 살펴보자.

모든 production 의 화살표 왼쪽이 하나의 변수로 구성되어 있으므로, 이 문법은 CFG 이다.

이 문법이 만드는 문장을 살펴보면 ab, abab, aaabbbaabb 와 같은 문장을 만들 수 있다.

 

이 문장은 linear 하지는 않다. 왜냐하면 S → SS 때문에 화살표 오른쪽에서 변수가 1개 이하여야 한다는 규칙에 위배되기 때문이다.

또한 이 문법도 나름대로 유명한 형태이다. 이 문법이 만드는 문장에 대해 a = (, b = ) 로 표현하면, 이 문장은 언제나 올바른 괄호 문자열을 만든다.

 

이 문법이 만드는 언어를 집합 기호로 표현하면 아래와 같다.

 

 

모든 a, b 로 구성된 문장 중에서 a, b의 개수가 같고, 이 문장의 모든 prefix에 대해서 a의 개수 ≥ b의 개수이면 된다.

 

 

L1 은 a, b의 개수가 같은 정렬된 문자열, L2는 a, b 의 개수와 상관없이 정렬된 문자열을 문장으로 갖는다.

L1 은 CFL이고, L2는 RL 이자 CFL 임을 어렵지 않게 받아들일 수 있다.

 

 

L1이 CFL임은 CFG를 만들어서 보일 수 있다.

(이때, 이 문법이 regular가 아니라고 해서, 이 언어가 regular 가 아니라는 것은 보장할 수 없다. RL의 문법은 다양하게 존재할 수 있기 때문이다. not regular는 펌핑 레마로 증명하자.)

 

 


L2가 RL 임은 DFA 또는 NFA를 그려서 보일 수 있고, CFL 임은 CFG를 만들어서 보일 수 있다.

(아래 그림에서는 RG로 표현하였다. RG는 화살표 왼쪽이 1개의 변수를 갖고, 오른쪽에는 모든 프로덕션이 모두 right-linear 하거나 모두 left-linear하면 된다.)

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

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

[오토마타] 15. Parsing  (0) 2024.12.08
[오토마타] 14. CFG & Derivation  (0) 2024.12.04
[오토마타] 12. Toy Program for DFA  (0) 2024.12.04
[오토마타] 11. Non-Regular Language 판별  (0) 2024.10.24
[오토마타] 10. Regular Language 의 Closure Properties  (0) 2024.10.24
'CS/오토마타' 카테고리의 다른 글
  • [오토마타] 15. Parsing
  • [오토마타] 14. CFG & Derivation
  • [오토마타] 12. Toy Program for DFA
  • [오토마타] 11. Non-Regular Language 판별
에버듀
에버듀
개발은 좋은데 뭘로 개발할까
  • 에버듀
    Blog. 에버듀
    에버듀
  • 전체
    오늘
    어제
    • 분류 전체보기 (614)
      • 개인 프로젝트 (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)
      • 자기계발 (44)
        • 생각 정리 (22)
        • 대외활동 (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
에버듀
[오토마타] 13. Context-Free Language
상단으로

티스토리툴바