กรณีการใช้งานจริงของการใช้ไวยากรณ์ Chomsky Type-I (ไวต่อบริบท) คืออะไร


9

ฉันมีความสนุกสนานเมื่อเร็ว ๆ นี้สำรวจการพัฒนาของ parsers ภาษาในบริบทของวิธีที่พวกเขาเหมาะสมกับลำดับชั้น Chomsky

ตัวอย่างของไวยากรณ์ที่ไวต่อบริบทคืออะไรในโลกแห่งความจริง (เช่นไม่ใช่ทางทฤษฎี)


8
ภาษาการเขียนโปรแกรมนับหรือไม่
Martin York

@ LokiAstari แน่นอน
Evan Plaice

2
ฉันเดาว่าการเขียนโปรแกรมภาษานับ แต่ไม่ได้ทำเพื่อการแก้ปัญหาที่ดีเนื่องจากความซับซ้อนของความไวตามบริบทจะถูกแทนที่ด้วยไวยากรณ์ที่ไม่มีบริบทด้วยการวิเคราะห์เชิงความหมายแทน
แฟรงค์

@ Frank ฉันคิดว่าปัญหาของฉันคือฉันไม่สามารถเข้าใจได้ว่าภาษาที่ไวต่อบริบทนั้นคืออะไรโดยไม่ใช้กับการใช้งานจริงบางอย่าง
Evan Plaice

มีภาษามนุษย์บางภาษาที่อาจไม่จำเป็นต้องใช้ตัวแยกวิเคราะห์ภาษาแบบนับซ้ำซ้ำและตกอยู่ในชุดภาษาประเภทที่ 1 (บริบทระดับสูง) cs.virginia.edu/~evans/cs3102/?p=138

คำตอบ:


9

คำถามที่ดี. แม้ว่าตามที่ระบุไว้ในความคิดเห็นภาษาการเขียนโปรแกรมจำนวนมากมีความไวต่อบริบทบริบทนั้นความไวตามบริบทมักไม่ได้รับการแก้ไขในขั้นตอนการแยกวิเคราะห์ แต่ในระยะต่อมา - นั่นคือ superset ของภาษาจะถูกวิเคราะห์โดยใช้ไวยากรณ์ และต้นไม้แยกเหล่านี้บางส่วนจะถูกกรองออกในภายหลัง

อย่างไรก็ตามนั่นไม่ได้หมายความว่าภาษาเหล่านั้นไม่ได้คำนึงถึงบริบทดังนั้นนี่คือตัวอย่าง:


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 'โหมด quirks' ซึ่งรองรับข้อยกเว้นตามบริบทเพื่อ 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 'โหมด quirks' และตัวประมวลผลล่วงหน้ารหัสพวกเขาจะไม่นับ?
Evan Plaice

2

บริบทที่ไวต่อไวยากรณ์บางครั้งใช้ในการอธิบายความหมายของภาษาโปรแกรม บางทีการใช้ไวยากรณ์ไวต่อบริบทที่ครอบคลุมที่สุดคือนิยามภาษา Algol68 มันใช้ grammer บริบทสองระดับฟรี (ดูhttp://en.wikipedia.org/wiki/Two-level_grammar ) เพื่ออธิบายทั้งไวยากรณ์และความหมายของโปรแกรม Algol68

เพื่อนร่วมงานของฉันสองคนใช้ไวยากรณ์ van Wijngaarden เพื่อควบคุมการนำ Algol68 ไปปฏิบัติ (ดูที่http://en.wikipedia.org/wiki/FLACC )

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