ฉันมีความสนุกสนานเมื่อเร็ว ๆ นี้สำรวจการพัฒนาของ parsers ภาษาในบริบทของวิธีที่พวกเขาเหมาะสมกับลำดับชั้น Chomsky
ตัวอย่างของไวยากรณ์ที่ไวต่อบริบทคืออะไรในโลกแห่งความจริง (เช่นไม่ใช่ทางทฤษฎี)
ฉันมีความสนุกสนานเมื่อเร็ว ๆ นี้สำรวจการพัฒนาของ parsers ภาษาในบริบทของวิธีที่พวกเขาเหมาะสมกับลำดับชั้น Chomsky
ตัวอย่างของไวยากรณ์ที่ไวต่อบริบทคืออะไรในโลกแห่งความจริง (เช่นไม่ใช่ทางทฤษฎี)
คำตอบ:
คำถามที่ดี. แม้ว่าตามที่ระบุไว้ในความคิดเห็นภาษาการเขียนโปรแกรมจำนวนมากมีความไวต่อบริบทบริบทนั้นความไวตามบริบทมักไม่ได้รับการแก้ไขในขั้นตอนการแยกวิเคราะห์ แต่ในระยะต่อมา - นั่นคือ 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" -->
ตราบใดที่ฉันรู้ไวยากรณ์บริบทที่ใช้ในการประมวลผลภาษาธรรมชาติเท่านั้น โปรแกรมแปลภาษาล่ามและคอมไพเลอร์ไม่พยายามวิเคราะห์ไวยากรณ์ที่ไม่มีบริบทเนื่องจากมีความซับซ้อน (แม้ว่าจะเคยพยายามทำมาแล้วในอดีต)
บางทีคุณอาจพบตัวอย่างการใช้งานจริงในห้องสมุดเหล่านี้:
http://en.wikipedia.org/wiki/List_of_natural_language_processing_toolkits
บริบทที่ไวต่อไวยากรณ์บางครั้งใช้ในการอธิบายความหมายของภาษาโปรแกรม บางทีการใช้ไวยากรณ์ไวต่อบริบทที่ครอบคลุมที่สุดคือนิยามภาษา Algol68 มันใช้ grammer บริบทสองระดับฟรี (ดูhttp://en.wikipedia.org/wiki/Two-level_grammar ) เพื่ออธิบายทั้งไวยากรณ์และความหมายของโปรแกรม Algol68
เพื่อนร่วมงานของฉันสองคนใช้ไวยากรณ์ van Wijngaarden เพื่อควบคุมการนำ Algol68 ไปปฏิบัติ (ดูที่http://en.wikipedia.org/wiki/FLACC )