Chomsky Type-I (문맥에 민감한) 문법을 사용하는 실제 사용 사례


9

나는 언어 파서가 Chomsky Hierarchy에 어떻게 맞는지에 관해 최근에 언어 파서의 개발을 탐구하는 것을 즐겼습니다.

상황에 맞는 문법의 실제 (예 : 이론적이지 않은) 예는 무엇입니까?


8
프로그래밍 언어는 중요합니까?
Martin York

@LokiAstari 물론입니다.
Evan Plaice

2
문맥 인식의 복잡성이 의미 론적 분석을 사용하는 문맥없는 문법으로 대체되기 때문에 프로그래밍 언어는 중요하지만 좋은 해결책은 아닙니다.
Frank

@ Frank 내 문제는 실제 사용에 적용하지 않으면 상황에 맞는 언어가 무엇인지 실제로 파악할 수 없다는 것입니다.
Evan Plaice

재귀 적으로 열거 가능한 언어 파서를 필요로하지 않는 일부 인간 언어가 있으므로 유형 1 (문맥에 민감한) 언어 집합에 속합니다. cs.virginia.edu/~evans/cs3102/?p=138

답변:


9

좋은 질문. 주석에서 언급 한 바와 같이 매우 많은 프로그래밍 언어가 문맥에 민감하지만, 그 문맥 민감도는 종종 구문 분석 단계에서 해결되지 않지만 이후 단계에서, 즉 문맥의 문법을 사용하여 언어의 수퍼 세트가 구문 분석됩니다 파싱 ​​트리 중 일부는 나중에 필터링됩니다.

그러나 이것이 해당 언어가 상황에 맞지 않다는 것을 의미하지는 않으므로 여기에 몇 가지 예가 있습니다.


Haskell을 사용하면 연산자로 사용되는 함수를 정의하고 해당 연산자의 우선 순위 및 연관성을 정의 할 수 있습니다. 즉, 다음과 같은 연산자 표현식에 올바른 구문 분석 트리를 작성할 수 없습니다.

a @@ b @@ c ## d ## e

당신은 이미에 대한 우선 순위 / 연관성 선언을 구문 분석하지 않았다면 @@##:

infixr 8 @@
infixr 6 ##

두 번째 예는 콘텐츠에 길이가 접두사 인 데이터 언어 인 Bencode입니다 .

<length>:<contents>

이 형식의 문제는 "필드"크기를 알아내는 유일한 방법은 ... 문자열을 구문 분석하는 것이므로 컨텍스트에 민감한 것이 없으면 구문 분석이 거의 불가능하다는 것입니다.


세 번째 예는 임의의 태그 이름이 허용된다고 가정 할 때 XML입니다. 여는 태그 이름에는 일치하는 닫기 태그가 있어야합니다.

<hi>
 <bye>
 the closing tag has to match bye
 </bye>
</hi> <!-- has to match "hi" -->

흥미 롭군 XML에 대해 알고있었습니다. XHTML 1.0 스펙을 뒷받침하는 것은 컨텍스트가없는 예외를 지원하는 '쿼크 모드'HTML 인터프리터에서 컨텍스트가없는 컨텍스트 XML을 깔끔하게 만드는 것입니다.
Evan Plaice

@EvanPlaice 나는 당신의 의견에 혼란스러워합니다- "clean XML"은 예제에서 보여준 것처럼 문맥에 민감 합니다.

4
@MattFenwick XML 예제가 XML에 컨텍스트가없는 진정한 이유를 보여주지 않는다고 생각합니다. 임의의 태그 이름이 허용되기 때문입니다. 특정 태그 세트 만 허용 된 경우 XML에 컨텍스트가 없습니다.
Honza Brabec

@HonzaBrabec 당신 말이 맞습니다. 암묵적으로 임의의 태그 이름이 허용된다고 가정했습니다. 나는 그 가정을 명시 적으로 언급 했어야했다. 지적 해 주셔서 감사합니다!

3

내가 아는 한 상황에 맞는 문법은 자연어 처리 에만 사용됩니다 . 프로그래밍 언어 인터프리터와 컴파일러는 복잡성으로 인해 컨텍스트가없는 문법을 구문 분석하려고하지 않습니다 (과거에 일부 시도가 수행 된 경우에도).

다음 라이브러리 중 하나에서 실제 사용 예를 찾을 수 있습니다.

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

http://opennlp.sourceforge.net/projects.html

http://nltk.org/

http://nlp.stanford.edu/nlp/javadoc/javanlp/


2
HTML '쿼크 모드'와 코드 프리 프로세서는 어떻습니까?
Evan Plaice 2013

2

상황에 맞는 문법은 때때로 프로그래밍 언어 의미론의 설명에 사용됩니다. 상황에 맞는 문법의 가장 포괄적 인 사용은 Algol68 언어 정의 일 것입니다. Algol68 프로그램의 구문과 의미를 설명 하기 위해 2 단계 컨텍스트 프리 그래머 ( http://en.wikipedia.org/wiki/Two-level_grammar 참조 )를 사용했습니다.

내 동료 몇 명이 van Wijngaarden 문법을 사용하여 Algol68을 구현하도록 지시했습니다 ( http://en.wikipedia.org/wiki/FLACC 참조 ).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.