그렇습니다. 문맥 인식 문법 (CSG)은 정의되지 않은 / 미 선언 / 언 바운드 변수를 확인할 수있을만큼 강력하지만 불행히도 CSG 문자열을 구문 분석하는 효율적인 알고리즘을 알지 못합니다.
상황에 맞는 언어의 실제 예는 C 프로그래밍 언어입니다. 변수를 먼저 선언 한 다음 나중에 사용하는 기능은 C 언어를 문맥 인식 언어 (CSL)로 만듭니다. ( 나는 형식화되지 않은 람다 미적분에 대해 모른다 ).
그리고 우리는 CSL (또는 CSG)에 대한 선형 파싱 알고리즘을 알지 못하기 때문에. 이것이 컴파일러 디자인의 이유이기 때문에 CFG를 구문 분석하는 효율적인 알고리즘을 알고 있기 때문에 구문 검사에 CFG (및 구문 분석 알고리즘 만 해당)를 사용합니다 (제한된 형식 인 경우). 컴파일러는 먼저 컨텍스트가없는 기능을 구문 분석 한 다음 문제가있는 방식으로 상황에 맞는 기능을 처리합니다 (예 : 기호 테이블에 정의 된 변수가 정의되어 있는지 확인하고 그렇지 않으면 오류가 발생 함).
또한 문맥 인식 문법은 자연어 처리 (NLP)에서 사용됩니다. 그리고 대부분의 자연어는 상황에 맞는 언어의 예입니다. ( 산스크리트어 언어 를 잘 모르겠습니다 ).
나는 어리석지 만 간단한 예제 로 설명하려고 노력할 것입니다 (단지 아이디어 일뿐입니다. 세분화 할 수 있습니다).
NOUN --> { BlueBomber, Grijesh, I, We}
TENSE --> { am, was, is, were}
VERB --> { going, eating, working}
SENTENCE --> <NOUN> <TENSE> <VERB>
이제이 문법을 사용하여 올바른 문장을 생성 할 수 있지만 잘못되었습니다. 예를 들어
SENTENCE --> <NOUN> <TENSE> <VERB>
Grijesh is working [Correct statement]
그러나
Grijesh am working [wrong statement]
이유 : <TENSE>의 값은 <NOUN>의 값 (예 :)에 따라 달라 I <TENNSE> --> I am
지므로 문법은 영어로 올바른 문장을 생성하지 않습니다.
사실 우리는 완전한 영어를위한 문맥없는 문법을 쓸 수 없습니다!
자연어 번역기 또는 문법 검사기가 제대로 작동하지 않습니다 (긴 문장으로 시도). 이 문제는 상황에 맞는 구문 분석 알고리즘에서 발생합니다.
참조 : Arun Kumar 박사의 강의를 볼 수 있습니다 .
일부 강의에서 그는 당신이 관심있는 것을 정확하게 설명합니다.