จะพิสูจน์ได้อย่างไรว่าไวยากรณ์นั้นไม่คลุมเครือ?


25

ปัญหาของฉันคือฉันจะพิสูจน์ได้อย่างไรว่าไวยากรณ์ไม่คลุมเครือ? ฉันมีไวยากรณ์ต่อไปนี้:

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 ซึ่งหมายถึงความไม่น่าสงสัย มันใช้ฟังก์ชั่นโครงสร้างของGซึ่งกลับไปที่ Chomsky และSchützenberger [1] คือGnLnG

SG(z)=n=0tnzn

กับจำนวนต้นไม้ไวยากรณ์Gมีคำของความยาวn แน่นอนคุณต้องมี| L n | สำหรับสิ่งนี้ในการทำงานtn=[zn]SG(z)Gn|Ln|

สิ่งที่ดีคือการที่คือ (ปกติ) ง่ายที่จะได้รับสำหรับภาษาบริบทฟรี แต่การหารูปแบบปิดสำหรับเสื้อnอาจเป็นเรื่องยาก แปลงGให้เป็นระบบสมการของฟังก์ชั่นด้วยตัวแปรเดียวต่อ nonterminal: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 nL(G)={wwRw{a,b}} palindromes ของความยาวnถ้าnเป็นเลขคู่,0มิฉะนั้น2n2nn0

การตั้งค่าระบบสมการให้ผลตอบแทน

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

whose solution is

SG(z)=112z2.

The coefficients of SG coincide with the numbers of palindromes, so G is unambiguous.


  1. The Algebraic Theory of Context-Free Languages by Chomsky, Schützenberger (1963)
  2. On the entropy of context-free languages by Kuich (1970)

3
ดังที่คุณทราบ @Raphael ความกำกวมไม่สามารถตัดสินใจได้ดังนั้นอย่างน้อยหนึ่งในขั้นตอนของคุณจะไม่สามารถใช้กลไกได้ ความคิดใดที่คน? การเดินทางรูปแบบปิดสำหรับ ? tn
Martin Berger

2
ระบบสมการอาจไม่สามารถแก้ไขได้อัลกอริธึมหากระดับสูงเกินไปและการดึงสัมประสิทธิ์ที่แน่นอนออกจากฟังก์ชั่นการสร้างอาจเป็นเรื่องยาก (เกินไป) ใน "การปฏิบัติ" แม้ว่าหนึ่งในข้อตกลงกับไวยากรณ์ของ "องศา" เล็ก ๆ - โปรดทราบว่าชัมสกีรูปแบบปกติจะนำไปสู่ระบบสมการของการศึกษาระดับปริญญาเล็ก - และมีวิธีการอย่างน้อย -asymptotics สำหรับสัมประสิทธิ์ ; สิ่งนี้อาจเพียงพอที่จะสร้างความคลุมเครือ โปรดทราบว่าเพื่อพิสูจน์ความไม่แน่นอนแสดงS L ( z ) = S G ( z )โดยไม่ต้องดึงสัมประสิทธิ์เพียงพอ การพิสูจน์ตัวตนนี้อาจเป็นเรื่องยาก SL(z)=SG(z)
ราฟาเอล

Thank you @Raphael. Do you know of any texts that develop in detail how undecidability comes into play even if one uses e.g. Chomsky normal form? (I can't get hold of Kuich.)
Martin Berger

@MartinBerger I just rediscovered your comment in my todo list; sorry for the long silence. There are three steps which (I think) are not computable in general: 1) Determine SG. 2) Compute |Ln|. 3) Determine [zn]Sg(z). In particular, what representation of L to use for 2)?
Raphael

Why is representation of L a problem? We can use any of the multiple ways of representing CFGs for compilers for example. Maybe you mean how to represent Ln?
Martin Berger

6

This is a good question, but some Googling would have told you that there is no general method for deciding ambiguity, so you need to make your question more specific.


2
The OP asks for proof techniques, not algorithms.
Raphael

I think so, too; it might be mentioned in the question.
reinierpost

1
Google is not an oracle of truth, because knowlede is not democratic, and Google results are. I wouldn't count on Google in this case, because people often copy-cat one from another without checking the correctness of what they copy. Without showing a proof, they might be wrong.
SasQ

5
@SasQ: You read my words too literally. What Google gives me is the URLs to aticles that explain things.
reinierpost

4

For some grammars, a proof by induction (over word length) is possible.


Consider for example a grammar G over Σ={a,b} given by the following rules:

SaSabSbε

All words of length 1 in L(G) -- there's only ε -- have only one left-derivation.

Assume that all words of length n for some nN have only one left-derivation.

Now consider arbitrary w=w1wwnL(G)Σn for some n>0. Clearly, w1Σ. If w1=a, we know that the first rule in every left-derivation has to be SaSa; if w1=b, it has to be SbSb. This covers all cases. By induction hypothesis, we know that there is exactly one left-derivation for w. In combination, we conclude that there is exactly one left-derivation for w as well.


This becomes harder if

  • there are multiple non-terminals,
  • the grammar is not linear, and/or
  • the grammar is left-recursive.

It may help to strengthen the claim to all sentential forms (if the grammar has no unproductive non-terminals) and "root" non-terminals.

I think the conversion to Greibach normal form maintains (un)ambiguity, to applying this step first may take care of left-recursion nicely.

The key is to identify one feature of every word that fixes (at least) one derivation step. The rest follows inductively.


3

Basically, it's a child generation problem. Start with the first expression, and generate it's children .... Keep doing it recursively (DFS), and after quite a few iterations, see if you can generate the same expanded expression from two different children. If you are able to do that, it's ambiguous. There is no way to determine the running time of this algorithm though. Assume it's safe, after maybe generating 30 levels of children :) (Of course it could bomb on the 31st)


1
The OP asks for proof techniques, not algorithms.
Raphael

2
that can't possibly be a way to prove if a grammar is ambiguous or not. As a matter of fact when that bombing happens is undecidable.
Sнаđошƒаӽ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.