문맥 자유 문법이란 무엇입니까?


104

누군가 문맥 자유 문법이 무엇인지 설명해 줄 수 있습니까? 위키피디아 항목과 형식 문법에 대한 위키피디아 항목을 살펴본 후, 나는 완전히 당황했습니다. 누군가가 이것들이 무엇인지 설명 할 정도로 친절할까요?

구문 분석과 정규식 엔진의 한계를 조사하고 싶기 때문에 궁금합니다.

이 용어가 직접 프로그래밍과 관련이 있는지 또는 일반적으로 언어학과 더 관련이 있는지 확실하지 않습니다. 그럴 경우 사과드립니다. 그렇다면 이동 될 수 있습니까?


2
더 관련이 있습니다Automata Theorem
Rahul

2
파싱을위한 형식 언어와 자동 이론에 관심이 있다면 Sudkamp의 Languages ​​and Machines 또는 Aho, Sethi & Ullman 's Compilers 같은 책을 추천합니다 . 각 책은 형식 문법의 한 유형 인 문맥 자유 문법에 대한 형식적인 설명을 제공 한 다음,이를 이해하는 데 필요한 문맥 자유 문법에 대한 기본 정리를 설명하고 증명합니다 (예 : 문맥 자유 언어 및 변환 및 정규형 정리). 집합 이론에 대한 간단한 이해를 넘어 형식 언어 이론을 배우기위한 수학적 전제 조건은 없습니다.
danportin

1
그러한 질문을 이론적 컴퓨터 과학으로 옮겨야하지 않습니까?
Pale Blue Dot

답변:


110

문맥 자유 문법은 특정 속성을 만족시키는 문법입니다. 컴퓨터 과학에서 문법은 언어를 설명합니다. 특히 공식 언어를 설명합니다.

형식 언어는 문자열 (기호의 시퀀스 ... 단어 "문자열"의 프로그래밍 사용과 매우 유사)의 집합 (객체 모음에 대한 수학적 용어)입니다. 형식 언어의 간단한 예는 길이가 3 인 {000, 001, 010, 011, 100, 101, 110, 111}의 모든 이진 문자열 세트입니다.

문법은 문법에서 설명하는 언어로 문자열을 구성하기 위해 만들 수있는 변환을 정의하여 작동합니다. 문법은 시작 기호 (일반적으로 S)를 기호 문자열로 변환하는 방법을 알려줍니다. 이전에 주어진 언어의 문법은 다음과 같습니다.

S -> BBB
B -> 0
B -> 1

이 해석하는 방법은 그 말을하는 것입니다 S교체 할 수 있습니다 BBB, 그리고 B0으로 대체 할 수 있으며, B우리가 할 수있는 문자열 010을 구성 1. 그래서 교체 할 수 있습니다 S -> BBB -> 0BB -> 01B -> 010.

문맥없는 문법은 단순히 당신이 바꾸는 것 (화살표의 왼쪽)이 하나의 "비 터미널"기호 인 문법입니다. 비 터미널 기호는 최종 문자열에 나타날 수없는 문법에서 사용하는 기호입니다. 위의 문법에서 "S"와 "B"는 비 터미널 기호이고 "0"과 "1"은 "터미널"기호입니다. 같은 문법

S -> AB
AB -> 1
A -> AA
B -> 0

"AB-> 1"과 같은 규칙을 포함하므로 규칙적이지 않습니다.


12
'정규가 아님'은 '문맥 자유롭지 않다'는 뜻입니까? (CFG로 표현할 수있는 언어는 정규 표현식으로 표현할 수있는 언어의 상위 집합이기 때문에)
Anti Earth

3
"S는 B로 대체 가능" "S는 BBB로 대체 가능"을 읽어야합니까?
Cosmo Harrigan 2014 년

4
맙소사, 이것은 내가 본 가장 잘 설명 된 답변 중 하나입니다.
Rafael Dias da Silva

1
@AntiEarth 두 번째 예는 일반 문법에서 허용되지 않는 단일 비 터미널 기호에서 두 개의 비 터미널 기호를 생성하는 규칙이 있기 때문에 일반 문법이 아닙니다 (또한 OP가 지적했듯이 여러 개의 비 터미널 기호가있는 규칙이 있습니다. 왼쪽). en.wikipedia.org/wiki/Regular_grammar
awwsmm

21

언어 이론은 계산 이론과 관련이 있습니다. 어떤 프로그램이 가능하거나 어떤 프로그램을 작성할 수 있는지, 어떤 유형의 문제를 해결하기 위해 알고리즘을 작성하는 것이 불가능한지 결정하는 컴퓨터 과학의 철학적 측면입니다.

정규식은 정규 언어를 설명하는 방법입니다. 정규 언어는 결정 론적 유한 자동화에 의해 결정될 수있는 언어입니다.

Finite State Machines에 대한 기사를 읽어야합니다 : http://en.wikipedia.org/wiki/Finite_state_machine

일반 언어 : http://en.wikipedia.org/wiki/Regular_language

모든 정규 언어는 문맥 자유 언어이지만 정규적이지 않은 문맥 자유 언어가 있습니다. Context Free Language는 Context Free Grammer 또는 단일 스택이있는 Finite State Machine 인 Pushdown Automata에서 허용하는 모든 문자열 집합입니다. http://en.wikipedia.org/wiki/Pushdown_automaton#PDA_and_Context-free_Languages

문자열이 언어로되어 있는지 여부를 결정하기 위해 Turing Machine (컴퓨터에서 작성할 수있는 모든 프로그램)이 필요한 더 복잡한 언어가 있습니다.

언어 이론은 또한 P 대 NP 문제 및 기타 흥미로운 것들과 매우 관련이 있습니다.

컴퓨터 과학 입문 3 년차 교과서는이 내용을 잘 설명했습니다. 계산 이론 입문. Michael Sipser 작성. 하지만 새 제품을 사는데 160 달러 정도의 비용이 들었고 그리 크지는 않습니다. 중고 사본을 찾거나 도서관이나 도움이 될만한 사본을 찾을 수 있습니다.

편집하다:

정규 표현식과 고급 언어 수업의 한계는 지난 50 년 동안 많은 연구를 통해 이루어졌습니다. 일반 언어에 대한 펌핑 기본형에 관심이있을 수 있습니다. 특정 언어가 규칙적이지 않다는 것을 증명하는 수단입니다.

http://en.wikipedia.org/wiki/Pumping_lemma_for_regular_languages

언어가 정규적이지 않다면 Context Free 일 수 있습니다. 즉, Context Free Grammer가 설명 할 수 있거나 더 높은 언어 클래스에있을 수도 있습니다. Context Free를위한 펌핑 기본형에 의해 Context Free가 아님을 증명할 수 있습니다. 정규식과 유사한 언어.

언어는 결정 불가능할 수도 있습니다. 즉, 튜링 머신 (컴퓨터가 실행할 수있는 프로그램 일 수 있음)조차도 문자열을 언어에서 허용할지 아니면 거부 할지를 결정하도록 프로그래밍 할 수 없습니다.

가장 관심이있는 부분은 정규 표현식이 어떤 언어를 결정할 수 있는지 확인하는 유한 상태 머신 (결정 론적 및 결정 론적)과 어떤 언어가 규칙적이지 않은지 증명하는 펌핑 기본형이라고 생각합니다.

기본적으로 어떤 종류의 기억이나 계산 능력이 필요한 언어는 규칙적이지 않습니다. 예를 들어 괄호 일치의 언어는 규칙적이지 않습니다. 예를 들어 기계는 괄호를 닫아야하는지 여부를 알기 위해 괄호를 열 었는지 기억해야하기 때문입니다.

b가 3 개 이상 포함 된 a 및 b 문자를 사용하는 모든 문자열의 언어는 일반 언어입니다. a ba ba ba

a보다 b가 더 많은 문자 a와 b를 사용하는 모든 문자열의 언어는 규칙적이지 않습니다.

또한 모든 유한 언어가 규칙적이어서는 안됩니다. 예를 들면 다음과 같습니다.

a보다 더 많은 b를 포함하는 문자 a와 b를 사용하는 50 자 미만의 모든 문자열의 언어는 규칙적입니다. 왜냐하면 유한하기 때문에 (b | abb | bab | bba | aabbb | ababb |). ..) 가능한 모든 조합이 나열 될 때까지 ect.


1
정규식은 패턴에 대해 문자열을 일치시키는 결정 프로그램이 아닙니다. 멤버십 문제를 결정할 수있는 정규 집합을 나타내는 표현입니다.
danportin

1
세트가 규칙적이라면 분명히 결정할 수 있습니다. 어떻게 말해야할지 모르겠습니다. 그것들은 기억이없는 효과적인 의사 결정 프로그램입니다.
Paul

정규 언어 ( "메모리가없는 결정 프로그램")에 대한 결정 절차를 제공하는 결정 론적 유한 자동 장치를 설명하고 있습니다. 정규식은 프로그램이 프로 시저가 아니라 정규 언어 를 나타내는 용어 입니다 . 이것이 나의 유일한 불만이었습니다.
danportin

1
"정규식은 정규 언어를 설명하는 방법입니다. 정규 언어는 결정 론적 유한 자동화에 의해 결정될 수있는 언어입니다." 그게 더 좋을까요?
Paul
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.