문맥 자유 문법(Context-free grammar)
왼쪽에 기호 하나만 오는 다시 쓰기 규칙(A → α)들로 문장을 만들어 내는 문법. 규칙을 적용한 흔적이 구문 트리(parse tree)가 되고, 괄호처럼 겹겹이 중첩된 구조를 적을 수 있다.
문맥 자유 문법은 기호를 다른 기호열로 바꾸는 규칙의 모음입니다. 대문자처럼 아직 풀어야 할 기호(비단말 기호(nonterminal symbol). 예를 들어 문장 S, 명사구 NP, 동사구 VP)와 실제 글자나 단어(단말 기호, terminal symbol)가 있고, 규칙의 왼쪽에는 언제나 비단말 기호 하나만 옵니다. 그래서 그 기호가 어떤 기호들 사이에 있든 상관없이 규칙을 쓸 수 있고, '문맥 자유'라는 이름이 여기서 나왔습니다. 시작 기호 S에서 출발해 단말 기호만 남을 때까지 규칙을 적용하는 과정을 유도라 하고, 이 문법이 유도할 수 있는 문자열들의 집합(set)이 문법의 언어입니다. 촘스키 위계(Chomsky hierarchy)의 둘째 층(유형 2)입니다.
보기:
aⁿbⁿ을 만드는 규칙 S → aSb는 자기 자신을 다시 품습니다. 이 되풀이(재귀, recursion) 덕분에 문맥 자유 문법은 '열린 것은 반드시 닫힌다'는 중첩을 얼마든지 깊이 적을 수 있고, 바로 이 점에서 정규 표현식(regular expression)과 유한 오토마톤(finite automaton)을 넘어섭니다. 유한한 상태로는 몇 겹 열렸는지를 셀 수 없기 때문입니다(비둘기집 원리, pigeonhole principle). 대신 스택(stack) 하나를 가진 푸시다운 오토마톤(pushdown automaton)이 딱 맞습니다. 스택은 접시 더미처럼 맨 위에만 넣고 꺼낼 수 있는 기억 장치라서, a를 읽을 때마다 접시를 하나 얹고 b를 읽을 때마다 하나 꺼내면 개수가 맞는지 알 수 있습니다. 거꾸로 aⁿbⁿcⁿ처럼 세 덩어리를 맞추는 일은 문맥 자유 문법으로도 안 됩니다.
주어진 문장의 트리를 찾는 일(구문 분석, parsing)은 작은 문제의 답을 표에 적어 가며 큰 문제를 푸는 동적 계획법(dynamic programming)으로 풀 수 있습니다. 1960년대에 코크, 영거, 가사미가 따로 찾아내 세 사람의 머리글자를 딴 CYK 알고리즘(CYK algorithm)은 '구간 i..j를 기호 A로 묶을 수 있는가'를 짧은 구간부터 채워 나가, 문법을 정해 두면 길이 n인 문장을
이어지는 곳. 1960년 국제 위원회가 만든 프로그래밍 언어 ALGOL 60의 보고서는 구문을 배커스–나우르 표기법(BNF, 존 배커스와 페테르 나우르의 이름을 땄습니다)이라는 문맥 자유 문법으로 적었습니다. 그 뒤로 거의 모든 프로그래밍 언어와 JSON 같은 데이터 형식의 구문이 이렇게 정의됩니다. 규칙마다 확률(probability)을 붙이면 확률 문맥 자유 문법(probabilistic context-free grammar)이 되어, 중의적인 문장에서 가장 그럴듯한 트리를 고를 수 있습니다. 앞 단어 몇 개만 보는 n-그램(n-gram) 모형은 트리를 보지 못하고, 이것이 촘스키가 유한 상태 모형을 비판한 핵심이었습니다. 규칙에 문맥을 허락하면 문맥 의존 문법(context-sensitive grammar)이 됩니다. αAβ → αγβ는 'A의 왼쪽에 α, 오른쪽에 β가 있을 때만 A를 γ로 바꿀 수 있다'는 규칙입니다(γ는 빈 문자열이 아니어야 합니다). 규칙에 어떤 제한도 두지 않으면 문법은 튜링 기계(Turing machine)와 같은 힘을 가집니다.
이 개념이 나오는 긴 글
이 개념을 언급하는 페이지
- 파스칼의 삼각형
… 개를 둘씩 묶어 나가는 방법(이진 구문 트리)의 수도 같은 카탈랑 수라서, 묶는 순서를 정해 주지 않는문맥 자유 문법에서는 한 문장의 구문 트리가 이만큼 빠르게 늘어납니다.
- 람다 계산
… 역설⟧과 비슷한 방법으로 모순을 찾아내 버려졌고, 계산 부분만 살아남았습니다. 람다 항의 문법 자체는 짧은문맥 자유 문법으로 적힙니다. 이어지는 곳. 1936–37년 튜링은 람다로 정의할 수 있는 함수와 튜링 기계로 …
- 유한 오토마톤
… 기계를 푸시다운 오토마톤이라 하고, 갈림길을 허용한(비결정적) 푸시다운 오토마톤이 인식하는 언어가 정확히문맥 자유 문법의 언어입니다. 이 층들이 촘스키 위계이고, 유한 오토마톤은 맨 아래층입니다. 이어지는 곳. 유한 …
- 촘스키 위계
… 적을 수 있습니다. 여기에 스택(접시 더미처럼 맨 위에만 넣고 꺼낼 수 있는 기억 장치) 하나를 더하면문맥 자유 문법의 언어를 알아보는 푸시다운 오토마톤이 됩니다. 입력이 적힌 칸만큼의 테이프를 읽고 쓸 수 있게 하면 선형 …
- 정규 표현식
… 짝 맞는 괄호처럼 개수를 끝없이 맞춰야 하는 언어는 적을 수 없고(비둘기집 원리), 이런 언어에는문맥 자유 문법이 필요합니다. 촘스키 위계의 가장 안쪽 층입니다. 다만 프로그래밍 언어의 '정규식'은 되참조 같은 …
- 카탈랑 수
… 끝까지 줄곧 앞설 확률을 묻는 문제로, 답은 (a-b)/(a+b) 입니다. 짝이 맞는 괄호열 전체는문맥 자유 문법S \to (S)S \mid \varepsilon 가 만드는 언어입니다. 이 규칙은 '짝 맞는 …
- 재귀
… 문제를 반으로 나눠 두 번 부르는 것이 분할 정복입니다. 문장 안에 문장이 들어가는 언어의 구조는문맥 자유 문법의 재귀 규칙으로 적고, 람다 계산에서는 함수에 이름을 붙여 자기 자신을 부를 수 없는데도 재귀를 만들 …
- 트리
… 수를 펼친 게임 트리는 미니맥스로 최선의 수를 고르는 데 쓰입니다. 또 문장의 짜임을 그린 구문 트리는문맥 자유 문법에서 나옵니다. 이어지는 곳. 이어진 그래프는 모두 신장 트리를 품고 있고, 변마다 길이가 있을 때 …
- 타입 추론: 힌들리–밀너
… 일반적인 단일화자가 모든 해를 거쳐 가게 한다는 성질은 보편 성질의 한 예입니다. 식의 나무 자체는문맥 자유 문법으로 파싱해 얻고, 단일화는 두 나무를 겹쳐 맞추는 알고리즘이라, 발생 검사를 빼먹으면 나무에 …
- 반환
… ×)로 채우는 비터비 알고리즘과 (+, ×)로 채우는 전방 알고리즘은 은닉 마르코프 모델에 있습니다.문맥 자유 문법의 CYK 표는 글자열을 두 조각으로 자르는 모든 방법을 반환으로 모으는 표 채우기입니다. 그래서 반환을 …