문법이 명확하다는 것을 증명하는 방법?


25

내 문제는 문법이 명확하다는 것을 어떻게 증명할 수 있는가? I는 다음의 문법을 가지고

Sstatementif expression then Sif expression then S else S

이것을 명백한 문법으로 만들면 올바른 것으로 생각합니다.

  • SS1S2

  • S1if expression then Sif expression then S2 else S1

  • S2if expression then S2 else S2statement

모호하지 않은 문법에는 모든 용어에 대해 하나의 구문 분석 트리가 있다는 것을 알고 있습니다.

답변:


20

언어 L 에 대해 문법 모호함 을 증명하는 방법은 적어도 있습니다 . 두 단계로 구성됩니다.G=(N,T,δ,S)L

  1. 입증 .LL(G)
  2. 증명 .[zn]SG(z)=|Ln|

첫 번째 단계는 매우 분명합니다. 문법이 원하는 단어를 (적어도) 생성한다는 것을 보여주십시오.

그 두 번째 단계 쇼 길이 많은 단어 구문 트리로 보유 N 으로서 L은 길이의 단어 갖는 N을 1로이 모호성을 의미 -. 그것은 Chomsky와 Schützenberger [1]로 돌아가는 G 의 구조 함수를 사용합니다.GnLnG

SG(z)=n=0tnzn

구문 트리의 수 G는 길이의 단어를 갖는 N . 물론 당신은 가지고 있어야합니다 | L n | 이 작동합니다.tn=[zn]SG(z)Gn|Ln|

좋은 것은이다 에 대한 닫힌 형태 찾는 있지만, 문맥 자유 언어에 대해 쉽게 획득 할 수 (보통) 인 t를 n은 어려울 수 있습니다. 비 터미널 당 하나의 변수를 사용하여 함수의 방정식 시스템으로 G 를 변환합니다 .SGtnG

[A(z)=(A,a0ak)δ i=0k τ(ai) :AN] with τ(a)={a(z),aNz,aT.

이것은 어려워 보일 수 있지만 실제로는 예에서 명백하게 될 구문 변환 일뿐입니다. 아이디어 생성 터미널 심볼의 지수로 계산된다는 것이다 시스템이 동일한 형태 때문에 G , Z가 N 으로 합계에서 자주 발생하는 N 개의 단말기들에 의해 생성 될 수 G . 자세한 내용은 Kuich [2]를 확인하십시오.zGznnG

(! 컴퓨터 대수)이 방정식 시스템을 풀면 수득 ; 이제 "만"계수를 풀어야합니다 (닫힌 일반 형태). TCS 치트 시트컴퓨터 대수는 자주 수행 할 수 있습니다.S(z)=SG(z)


규칙이 있는 간단한 문법 를 고려하십시오.G

.SaSabSbε

(1 단계, 유도 증명) 임이 분명합니다 . 있다 2 , n은L(G)={wwRw{a,b}}n이 짝수이면길이n의회문 2 개 ,그렇지 않으면02n2nn0

방정식 시스템 수율 설정

S(z)=2z2S(z)+1

그의 해결책은

.SG(z)=112z2

계수 일치 하므로, 회문의 수와 G는 모호하다.SG G


  1. Chomsky, Schützenberger (1963) 의 문맥없는 언어대한 대수적 이론
  2. Kuich 의 문맥없는 언어의 엔트로피 (1970)

3
@Raphael을 알고 있듯이 모호성은 결정할 수 없으므로 적어도 한 단계는 기계화 할 수 없습니다. 어떤 것이 있습니까? 대한 닫힌 양식을 얻는가? tn
Martin Berger 2013

2
학위가 너무 높으면 방정식 시스템을 알고리즘 적으로 해결할 수 없으며 생성 함수에서 정확한 계수를 가져 오는 것이 (너무) 어려울 수 있습니다. 참고 말하자면, 그 작은 정도의 방정식 시스템 촘스키 정규형 리드 - - "연습"에서,하지만, 하나는 종종 작은 "도"의 문법을 다루는 적어도 얻을 수있는 방법이 있습니다 계수에 대한 -asymptotics은 ; 모호성을 설정하기에 충분할 수 있습니다. 모호성을 증명하기 위해 계수를 당기지 않고 S L ( z ) = S G ( z ) 를 표시하는 것으로 충분합니다. 그러나이 정체성을 증명하는 것은 어려울 수 있습니다. SL(z)=SG(z)
라파엘

@Raphael 감사합니다. 예를 들어 Chomsky 일반 형식을 사용하더라도 결정 불가능한 방식이 어떻게 전개되는지 자세히 개발 한 텍스트를 알고 있습니까? (나는 Kuich를 붙잡을 수 없다.)
Martin Berger

@MartinBerger 방금 할 일 목록에서 댓글을 다시 발견했습니다. 긴 침묵으로 죄송합니다. 1) 결정 : 일반적으로 계산할 수없는 (내가 생각하는) 세 단계가 있습니다 . 2) 계산 | L n | . 3) 결정 [ (Z)의 N ] S g ( Z ) . 특히 2)에 사용할 L의 표현은 무엇 입니까? SG|Ln|[zn]Sg(z)L
Raphael

의 표현이 왜 문제입니까? 예를 들어 컴파일러의 CFG를 나타내는 여러 가지 방법 중 하나를 사용할 수 있습니다. 어쩌면 L n 을 나타내는 방법을 의미 합니까? LLn
Martin Berger

6

이것은 좋은 질문이지만 일부 인터넷 검색은 모호성을 결정하는 일반적인 방법이 없다고 말했기 때문에 질문을 더 구체적으로 만들어야합니다.


2
OP는 알고리즘이 아닌 증명 기술을 요구합니다.
Raphael

나도 그렇게 생각해; 그것은 질문에서 언급 될 수 있습니다.
reinierpost

1
Knowlede는 민주적이지 않으며 Google 결과도 있기 때문에 Google은 진실의 오라클이 아닙니다. 사람들은 종종 자신이 복사 한 내용의 정확성을 확인하지 않고 서로를 복제하기 때문에이 경우 Google에 포함되지 않습니다. 증거를 제시하지 않으면 잘못되었을 수 있습니다.
SasQ

5
@SasQ : 문자 그대로 내 말을 읽습니다. Google이 제공하는 것은 내용을 설명하는 aticles의 URL입니다.
reinierpost

4

일부 문법의 경우, 유도에 의한 증명 (단어 길이 이상)이 가능합니다.


예를 들어 다음 규칙에 따라 Σ = { a , b }에 대한 문법 를 고려하십시오 .GΣ={a,b}

SaSabSbε

L ( G ) 에서 길이 모든 단어 에는 ε 만 있고 왼쪽 파생은 하나뿐입니다.1L(G)ε

nnN

w=w1wwnL(G)Σnn>0w1Σw1=aSaSaw1=bSbSbww


이 경우 더 어려워집니다

  • 여러 개의 비 터미널이 있으며
  • 문법이 선형이 아니거나
  • 문법은 재귀 적입니다.

(문법에 비생산적인 비 말단이없는 경우) 모든 "형"과 "루트"비 말단에 대한 주장을 강화하는 데 도움이 될 수 있습니다.

나는 Greibach 정규 형식으로의 변환이 모호성을 유지 한다고 생각 합니다.이 단계를 먼저 적용하면 왼쪽 재귀를 잘 처리 할 수 ​​있습니다.

핵심은 하나 이상의 파생 단계 를 수정하는 모든 단어의 하나의 기능을 식별하는 것 입니다. 나머지는 귀납적으로 따릅니다.


3

기본적으로, 그것은 어린이 세대 문제입니다. 첫 번째 표현식으로 시작하여 하위 항목을 생성하십시오. ... 반복적으로 (DFS) 계속 수행하고 몇 번의 반복 후에 두 개의 다른 하위에서 동일한 확장 표현식을 생성 할 수 있는지 확인하십시오. 그렇게 할 수 있다면 모호합니다. 이 알고리즘의 실행 시간을 결정할 방법이 없습니다. 아마도 30 레벨의 아이들을 생성 한 후에 안전하다고 가정하십시오 :)


1
OP는 알고리즘이 아닌 증명 기술을 요구합니다.
Raphael

2
문법이 모호한 지 여부를 증명할 수있는 방법 은 아닙니다. 실제로 그 폭탄 이 터질 때 결정하는 것은 불가능합니다.
Sнаđошƒаӽ
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.