มีขั้นตอนวิธีการแยก CFG nongeneral ที่รับรู้ EPAL หรือไม่


23

EPAL ภาษาของ palindromes คู่ถูกกำหนดเป็นภาษาที่สร้างขึ้นโดยไวยากรณ์บริบทที่ไม่มีความชัดเจนต่อไปนี้:

Saa

Sbb

SaSa

SbSb

EPAL เป็น 'bane' ของอัลกอริทึมการแยกวิเคราะห์หลายอย่าง: ฉันยังไม่เคยพบอัลกอริทึมการแยกวิเคราะห์สำหรับ CFG ที่ไม่คลุมเครือซึ่งสามารถแยกไวยากรณ์ใด ๆ ที่อธิบายภาษา มักใช้เพื่อแสดงว่ามี CFG ที่ไม่คลุมเครือซึ่งไม่สามารถแยกวิเคราะห์โดยตัวแยกวิเคราะห์เฉพาะได้ นี่เป็นแรงบันดาลใจให้กับคำถามของฉัน:

มีอัลกอริธึมการแยกวิเคราะห์ที่ยอมรับเฉพาะ CFG ที่ชัดเจนซึ่งใช้งานได้กับ EPAL หรือไม่

แน่นอนหนึ่งสามารถออกแบบ ad-hoc parser สอง pass- สำหรับไวยากรณ์ที่แยกวิเคราะห์ภาษาในเวลาเชิงเส้น ฉันสนใจวิธีการวิเคราะห์คำที่ไม่ได้ออกแบบมาเป็นพิเศษโดยคำนึงถึง EPAL


1
ฉันเกือบจะกลัวที่จะถาม: มีอะไรผิดปกติกับ LL (1) โดยการสืบเชื้อสายซ้ำ?
Raphael

3
โคตรซ้ำที่ไม่ย้อนรอยซ้ำไม่สามารถจัดการ EPAL ได้เนื่องจากภาษานั้นไม่ใช่ LL (k) สำหรับ k ใด ๆ โคตรซ้ำด้วยการย้อนรอยสามารถจัดการไวยากรณ์ในเวลาแต่นั่นเป็นอัลกอริทึมทั่วไปที่มีพฤติกรรมเลวร้ายที่สุดแบบเอกซ์โปเนนเชียลซึ่งไม่ได้เป็นสิ่งที่ฉันกำลังมองหา O(n2)
อเล็กซ์สิบ Brink

O ( 2 N )O(N2)ไม่ใช่เลขชี้กำลังมันเป็นกำลังสอง เป็นเลขยกกำลัง O(2N)
Victor Stafusa

1
@Victor: การย้อนรอยมีพฤติกรรมแบบทวีคูณบนไวยากรณ์บางตัวไม่ใช่เฉพาะไวยากรณ์นี้ ถึงกระนั้นมันก็เป็นอัลกอริทึมที่ทำงานกับแกรมม่าที่คลุมเครือเพื่อเป็นคำตอบสำหรับคำถามของฉัน
Alex สิบ Brink

1
@jmad: ความตั้งใจของฉันคือไม่ต้องแยกภาษา (คุณสามารถทำอย่างนั้นในเวลาเชิงเส้น) แต่เพื่อตอบสนองความอยากรู้ของฉัน: ฉันเห็นว่ามันถูกใช้เป็นตัวอย่างของภาษาที่ไม่สามารถแยกวิเคราะห์โดยวิธีการแยกวิเคราะห์ หลายครั้งที่ฉันอยากรู้ว่ามีวิธีการแยกวิเคราะห์บางอย่างที่รู้จักหรือไม่
Alex สิบ Brink

คำตอบ:


14

พิจารณาร่างกลยุทธ์การแยกวิเคราะห์ต่อไปนี้ด้วยความเสี่ยงของคุณเอง

แทนที่จะอ่านอินพุตจากปลายด้านเดียวเท่านั้นเราอ่านจากทั้งสองด้านและมองหากฎการจับคู่ เราสามารถทำสิ่งนี้ในสไตล์สืบเชื้อสายซ้ำ; ในการเรียกไปที่ค้นหาคำนำหน้าและคำต่อท้ายไปยังอินพุตเช่นว่ามีกฎลงมาที่กับคำที่เหลือ หากไม่มีกฎที่ตรงกันให้ปฏิเสธคำนั้นW วีW B V B ( )A()wvAwBvB()

อัลกอริทึมนี้แยกวิเคราะห์ไวยากรณ์แบบเส้นตรงและไม่คลุมเครือทั้งหมด มันต้องใช้เวลาเชิงเส้นถ้าทุกคู่กฎและมีหรือ ¹ ซึ่งรวมถึง EPAL มิฉะนั้นเราจะต้องมองไปข้างหน้าดังนั้นเราจึงอาจใช้เวลาเวลาAwBvAwBv V s V Θ ( n 2 )wpwvsvΘ(n2)

แนวคิดนี้ไม่สามารถใช้ได้กับไวยากรณ์ที่ไม่ใช่เชิงเส้นเลย แต่ไม่สามารถแยกวิเคราะห์ไวยากรณ์เชิงเส้น แต่ไม่ชัดเจนโดยไม่มีการย้อนรอย (สำหรับอินพุตเชิงลบอย่างน้อย)


  1. w v v w swpvหมายถึงที่นี่ว่าและนั่นคือทั้งสองคำเป็นคำนำหน้าของอีกคำ คล้ายกับคำต่อท้ายwvvws

1
ยอดเยี่ยม สิ่งที่ฉันกำลังมองหา เป็นเรื่องที่ดีมากที่ภาษาที่ไม่ใช่สำหรับใด ๆสามารถวิเคราะห์ได้ด้วยอัลกอริธึมแบบง่าย ๆ kNLR(k)k
Alex สิบ Brink

1
หลังจากให้ความคิดเพิ่มเติมนี้ฉันค้นพบข้อผิดพลาดเล็กน้อยในคำอธิบายของคุณ: ไวยากรณ์เชิงเส้นไม่มีความกำกวม แต่ไม่มีคำนำหน้าที่ไม่ซ้ำกันเช่นที่คุณอธิบาย ยังมีคำนำหน้าไม่ซ้ำกัน แต่คุณอาจจะต้องดูภายใน nonterminal ที่จะได้รับมันและเวลาในการทำงานของคุณจะกลายเป็น2) อัลกอริทึมของคุณไม่ทำงานในแม้ว่า O ( n 2 ) E P A LSaAb|aBb,Aa,BbO(n2)EPAL
Alex สิบ Brink

@AlextenBrink จับได้ดี ฉันแก้ไขบัญชีสำหรับสิ่งนี้
Raphael
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.