"문맥없는 문법"에서 "문맥"이란 무엇입니까?


30

Context-Free Grammar가 무엇인지에 대한 온라인 정의가 많이 있지만, 내가 찾은 것은 내 주요 문제를 만족시키지 않습니다.

어떤 맥락에서 자유롭습니까?

조사하기 위해 "문맥 인식 문법"을 Google로 검색했지만 여전히 "문맥"이 무엇인지 찾지 못했습니다.

누군가이 context이름에서 그 용어가 무엇을 의미 하는지 설명해 주 시겠습니까?


5
나는 위키피디아 설명이 꽤 좋다는 것을 발견했다. "비정규 어의 문맥에 관계없이 생산 규칙을 ​​적용 할 수있을 때 공식적인 문법은"문맥이없는 "것으로 간주된다. 오른쪽으로 교체하십시오. " -그것은 "일반 영어"가되기 위해 표현되고 단순화 될 수 있지만, 그것의 요지는 나에게 분명해 보입니다.
jkff

1
@ jkff 설명이 훌륭하다는 것을 알게되어 기쁩니다. 그러나 여전히 "컨텍스트"가 무엇을 의미하는지 이해하지 못했습니다. 컨텍스트가 있고 컨텍스트가없는 예를보아야합니다. 내가 본 모든 문법에는 문맥이있는 것 같습니다
CodyBugstein

정의에서 명확하지 않습니까?
Raphael

2
아이러니하게도, 문맥의 결정적인 부분이 그 정의 에서 빠져 있었기 때문에 설명을 위해 문장을 추가했습니다.
reinierpost

2
예 : C ++ 11에서 override사용되는 위치 (예 : 컨텍스트)에 따라 변수 이름 또는 키워드 일 수 있습니다. 메소드 선언 후에 사용되는 경우 키워드입니다. 그렇지 않으면 그렇지 않습니다. 상황에 맞는 문법의 예입니다.
Thomas Eding

답변:


37

당신은 옳습니다. 어떤 의미에서 항상 맥락이 있습니다. 작품을 이해하지 않고 "컨텍스트가없는"에서 "컨텍스트"의 의미를 이해할 수 없다고 생각합니다.

프로덕션은 대체 규칙입니다. 언어 내에서 문자열을 생성하려면 왼쪽에있는 것을 오른쪽에있는 것으로 대체 할 수 있습니다.

A -> xy

이것은 추상 시퀀스 A가 문자 "x"와 문자 "y"로 대체 될 수 있음을 의미합니다. 보다 복잡한 제작도 가능합니다.

zA -> xy

이것은 문자 "z"다음에 추상 시퀀스 A가 문자 "x"및 "y"로 대체 될 수 있음을 의미합니다.

문맥없는 생산이란 단순히 왼쪽에 한 가지만 있다는 것을 의미합니다. 첫 번째 예제는 컨텍스트가 없습니다. A는 전후에 무엇이든지 상관없이 "x"와 "y"로 대체 될 수 있기 때문입니다. 그러나 두 번째 예에서 문자 "z"는 A 앞에 나타나야합니다. 그런 다음 조합을 "x"와 "y"로 바꿀 수 있으므로 컨텍스트가 관련되어 있습니다.

문맥이없는 문법은 문맥이없는 작품 만있는 문법 일뿐입니다.

두 번째 예는 실제로 무제한 생산의 예입니다. 컨텍스트가없는 것과 "컨텍스트에 민감한"이라는 제한이없는 다른 범주가 있습니다. 상황에 맞는 제작의 예는 다음과 같습니다.

zA -> zxy

차이점은 왼쪽에서 A (및 이후) ​​앞에 오는 것이 오른쪽에 보존되어야한다는 것입니다. 이는 효과적으로 A 만 대체되지만 적절한 상황에서만 대체 될 수 있음을 의미합니다.


2
큰 도움이되어 주셔서 감사합니다! 나는 실제로 당신이 보여준 것처럼 왼쪽에 하나 이상의 변수가있는 문법 예제를 보지 못했습니다. 그것이 "문맥"이 무엇인지 볼 수없는 이유라고 생각합니다. 감사합니다
CodyBugstein

4
아마도 더 간단한 상황의 예는 다음과 zA -> zxy같습니다. A는 여전히 xy로 대체되지만 z 후에 만 ​​가능합니다.
MSalters

더 자세하게,이 답변은 무제한 문법 에 대해 이야기 하지만 @MSalters는 문맥에 민감한 문법 이 문맥의 의미에 대한 더 나은 예를 만들 것이라고 지적합니다.

@MSalters : 당신은 좋은 지적이 있습니다. 나는 대답을 수정했다. 더 복잡하게 들리지 않으면 서 내 설명에 이러한 세부 정보를 추가하는 방법을 찾기가 어려웠으므로 결국에는 더 많은 세부 사항을 추가하는 것이 었습니다.
본 카토

9

규칙 고려하고 라는 문장 형을 가지고 있다고 가정하면 β A 감소는 α와 δ가 무엇인지에 의존하지 않습니다. 따라서 주변 컨텍스트에 의존하지 않으므로 컨텍스트가 없습니다.

Aβ
αAδ

베타 란 무엇입니까? 터미널입니까 아니면 변수입니까? 그리고 "문학적 형태"를 설명 할 수 있습니까? 그것이 더 이상 파생 될 수 없다는 것을 의미합니까?
CodyBugstein

베타는 A-> 베타가 규칙 일 수 있습니다. 문장 형태는 문법 규칙을 사용하여 시작 기호가 주어지면 결과로 변환됨을 의미합니다. 이 결과를 문장 형식이라고합니다. 모든 규칙을 사용할 때마다 새로운 문장 양식을 얻습니다.
iLoveCamelCase

3
@Imray 문법과 문맥이없는 문법에 대한 공식적인 정의를 살펴 봐야합니다 . 공식적인 객체 를 이해하는 지름길은 없습니다 .
Raphael

1
@Imray 문장 형식 은 문법 규칙 ( 제작 이라고도 함 )을 적용 하여 공리 ( 초기 기호 라고도 함) 에서 파생되는 터미널비 터미널 기호 의 문자열입니다 . 비 터미널 기호 중 하나에 규칙을 적용하여 문장 형식을 다른 형식으로 파생 할 수 있습니다. 비 터미널이 남아 있지 않은 경우, 문장 형식은 문장 , 즉 문법으로 정의 되거나 생성 된 언어의 문자열 또는 단어입니다 . 이 용어는 언젠가 공식 언어 이론의이 부분에 주요 기여를 한 언어 학자들로부터 유래 한 것입니다.
babou

나는 문장 형식에 변수가있을 수 없다고 생각했습니다 . 단지 터미널 이어야 합니다.
CodyBugstein
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.