ใครสามารถยกตัวอย่างง่ายๆ แต่ไม่ใช่ของเล่นของไวยากรณ์ตามบริบท


12

ฉันพยายามที่จะเข้าใจไวยากรณ์ที่ไวต่อบริบท

ฉันเข้าใจว่าทำไมภาษาเช่น

  1. {wwwA}
  2. {anbncnnN}

ไม่ใช่บริบทฟรี แต่สิ่งที่ฉันอยากรู้ว่าภาษาที่คล้ายกับแคลคูลัสแลมบ์ดาที่ไม่ได้พิมพ์ออกมานั้นเป็นบริบทที่อ่อนไหวหรือไม่

ฉันต้องการดูตัวอย่างของแบบง่าย ๆ แต่ไม่ใช่ของเล่น (ฉันพิจารณาตัวอย่างของเล่นด้านบน) ตัวอย่างของไวยากรณ์ไวตามบริบทที่สามารถสำหรับกฎการผลิตบางอย่างเช่นบอกว่าสัญลักษณ์บางอย่างหรือไม่ อยู่ในขอบเขตปัจจุบัน (เช่นเมื่อสร้างเนื้อหาของฟังก์ชัน)

ไวยากรณ์ไวตามบริบทมีพลังมากพอที่จะทำให้ตัวแปรที่ไม่ถูกกำหนด / ไม่ได้ประกาศ / ไม่ถูกผูกไว้เป็นข้อผิดพลาดทางไวยากรณ์ (แทนที่จะเป็นความหมาย) หรือไม่


1
ภาษาการเขียนโปรแกรมเกือบทั้งหมดเป็นแบบตามบริบท ตัวอย่างเช่นตัวแปรที่จำเป็นต้องประกาศก่อนใช้ตัวระบุควรเป็นค่าเฉพาะบริบททั้งหมด (หมายถึงบริบทความหมาย แต่สามารถทำให้เข้าใจผิด) cs.purdue.edu/homes/hosking/502/notes/04-sikantics.pdf
Nikos M .

ทีนี้ "context-sensitive" เป็นคำมาตรฐานสำหรับไวยากรณ์ชนิดที่ 1
reinierpost

คำตอบ:


8

ใช่ฉันเชื่อว่ามันเป็นไปได้ แต่ไม่ฉันไม่เต็มใจที่จะสร้างไวยกรณ์ตามบริบทที่ชัดเจน ฉันจะอธิบายคำตอบโดยแยกคำถามออกเป็นสองส่วน

(1) ตัวอย่างที่ไม่ใช่ของเล่นจะเป็นอย่างไร ควรสะท้อนถึงการประกาศตัวแปร ข้อเสนอของฉันเกี่ยวกับภาษาที่แยกจากการเขียนโปรแกรมจริงจะเป็นอย่างนี้ ตัวอักษรเป็น\} ภาษานั้นคำนึงถึงบริบท{a,b,;,(,)}

{w1;w2;;wn(x1;x2;;xm)wi,xj{a,b}, each xj is equal to some wi}

(2) ในการแสดงจริง ๆ แล้วมันเป็นไปตามบริบทผมจะใช้แบบอื่น ของเครื่องจักรทัวริงที่ใช้เทปเป็นเส้นตรง: LBA ออโตเมติกแบบมีขอบเขตตรง ฉันสามารถโปรแกรมให้จับคู่รูปแบบ / ฉันจะพิจารณาแต่ละอย่างต่อเนื่องและพยายามจับคู่กับที่เหมาะสมตัวอักษรตามตัวอักษร LBA นั้นเทียบเท่ากับไวยากรณ์ไวตามบริบท แต่ง่ายต่อการโปรแกรมxjwj


ขอบคุณสำหรับการโพสต์ ตอนนี้ฉันไม่ค่อยคุ้นเคยกับ LBAs ดังนั้นฉันจึงเชื่อมั่นในประเด็น (2) น้อยลง ณ จุดที่ (1) ฉันพยายามที่จะดูวิธีการสร้างกฎที่จะผลิตที่คาดว่าชื่อตัวแปรเป็นนิพจน์เพียงหนึ่งในตัวแปรในขอบเขตปัจจุบัน ฉันไม่จำเป็นต้องเห็น CSG ที่เป็นทางการทั้งหมด แต่เพียงคำอธิบายที่ไม่เป็นทางการก็ใช้งานได้ ฉันไม่สามารถจินตนาการได้ว่าจะทำอย่างไรกับชื่อตัวแปรหลายสัญลักษณ์ซึ่งเป็นการใช้บริบทที่แตกต่างไปกว่าเช่นการใช้บริบทที่ไม่ใช่เทอร์มินัลเดียวเพื่อกำหนดข้อตกลงของหัวเรื่อง - กริยาในประโยค ~ ประโยคภาษาอังกฤษ

ในทางกลับกันฉันมาจากพื้นหลังของภาษาที่เป็นทางการ (และไม่ใช่เจ้าของภาษาอังกฤษ) และฉันมีปัญหาในการเข้าใจสิ่งที่คุณต้องการจำลอง / เป็นตัวแทน ขออภัย! ในวิสัยทัศน์ของฉันในบริบทนี้เป็นเพียงของเล่นตัวอย่าง แต่เป็นส่วนหนึ่งของสิ่งที่คุณต้องการบรรลุโดยมีสำเนาของสตริงเดียวกัน (ชื่อตัวแปร){www}
Hendrik Jan

ขอบคุณสำหรับการตอบกลับ!. เป็นตัวอย่างของเล่นและฉันเข้าใจว่าทำไมมันถึงไม่เป็นบริบท แต่ฉันก็ยังไม่หยั่งรู้ "ดู" ว่ามันไวต่อบริบทอย่างไรหรือ CSG จะสร้างอย่างไร ให้ฉันพยายามอธิบายสิ่งที่ฉันไม่เข้าใจ (มีคำถามติดตามอย่างน้อยหนึ่งข้อ แต่พอเพียงในตอนนี้): CSG จะใช้บริบทที่มีคำหลายสัญลักษณ์เพื่อสร้างหนึ่งในคำเหล่านั้นได้อย่างไรในบางครั้ง การผลิต? จากสิ่งที่ฉันได้เห็น CSG โดยทั่วไปทำงานโดยการแลกเปลี่ยนอักขระระหว่างการผลิตและการใช้สัญลักษณ์เดียวเพื่อควบคุมการผลิต แต่ไม่ใช่คำที่มีหลายสัญลักษณ์
{ww|w...}

3
โอ้ นั่นเป็นคำถามที่ค่อนข้างชัดเจน โดยไม่ให้ไวยากรณ์สำหรับฉันสามารถพูดบางสิ่ง ไวยากรณ์มีสอง "สัญลักษณ์เขตแดน" พูดLRในช่วงรากศัพท์สตริงดูเหมือนLwRwสร้างตัวอักษรจากตัวอักษรพร้อมกับสำเนาที่จะ "เลื่อน" ไปเหนือตัวอักษรในโดยโปรดักชั่น (ในทางเทคนิคนั่นคือไวยากรณ์เดียวที่เทียบเท่ากับ CS) เมื่อ "สาร" ต้นน้ำมันจะเขียนสำเนาของตัวอักษรRa ดังนั้นจึงสามารถคัดลอกสตริง (multisymbol) ที่ยาวขึ้นได้ L R L W R W L M W MM R M R R{ww}LRLwRwLaMawMabbMaRMaRRa
เฮนดริค ม.ค.

13

ตัวอย่างที่ชื่นชอบของภาษาบริบท (CSL) เป็นSAT Landweber-คุโรดะทฤษฎีบทกล่าวว่า CSL = NSPACE [N]อินสแตนซ์ SAT ใด ๆ มีใบรับรองขนาดเชิงเส้นดังนั้น SAT เป็น CSL ดูคำถามของฉันไวยากรณ์ไวต่อบริบทสำหรับ SAT? สำหรับการอ้างอิงและการสนทนา[n]

ภาษา NP-hard อื่น ๆ อีกมากมายอยู่ใน CSL ด้วยเหตุผลเดียวกันเช่น CLIQUE

นอกจากนี้ยังมีภาษาธรรมชาติใน CSL ที่ค่อนข้างยาก

อย่างไรก็ตามฉันไม่ได้ตระหนักถึงวิธีใด ๆ ที่จะแสดง CSL ตามอำเภอใจตามบริบทของไวยากรณ์ (CSG) นอกเหนือจากการใช้การก่อสร้างของ Landweber ในทฤษฎีบท 3 ของบทความของเขา ในการก่อสร้างนี้ CSG อธิบายการย้อนกลับของการทำงานของหุ่นยนต์ที่มีขอบเขตเป็นเส้นตรงที่รับรู้ CSL การผลิตของ CSG อธิบายถึงสถานะของเครื่องโดยเฉพาะจากการเคลื่อนไหวที่เป็นไปได้เพียงครั้งเดียว CSG เช่นนั้นเป็นการแปลอัตโนมัติของไวยากรณ์ไปสู่ไวยากรณ์โดยตรงดังนั้นจึงไม่จำเป็นต้องสอดคล้องกับคุณลักษณะภาษาเช่นการประกาศตัวแปร แต่จะจมอยู่กับรายละเอียดของหุ่นยนต์แทน

หากคุณยืนยันใน CSG แทนที่จะเป็น CSL และหากคำถามจริงของคุณเกี่ยวกับการต้องการเห็น CSG สำหรับภาษาที่เกี่ยวข้องกับการกำหนดขอบเขตตัวแปรที่ จำกัด คำตอบของ Hendrik Jan ดูเหมือนจะเป็นการเริ่มต้นที่ดี


9

ใช่ไวยากรณ์ไวตามบริบท (CSG) มีประสิทธิภาพเพียงพอที่จะทำการตรวจสอบตัวแปรที่ไม่ได้กำหนด / ไม่ได้ประกาศ / ไม่ได้ผูกไว้ แต่น่าเสียดายที่เราไม่รู้จักอัลกอริธึมที่มีประสิทธิภาพในการแยกสตริงของ CSG

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

และเนื่องจากเราไม่รู้อัลกอริธึมการวิเคราะห์คำเชิงเส้นสำหรับ CSL (หรือ CSG) นั่นคือเหตุผลในการออกแบบคอมไพเลอร์เราใช้ CFG (และการแยกวิเคราะห์ algoritm เท่านั้น) สำหรับการตรวจสอบไวยากรณ์เนื่องจากเรารู้ว่าอัลกอริทึมที่มีประสิทธิภาพในการแยก CFG (ถ้าอยู่ในรูปแบบที่ จำกัด ) คอมไพเลอร์แยกวิเคราะห์คุณลักษณะที่ไม่มีบริบทและจากนั้นจัดการคุณลักษณะที่คำนึงถึงบริบทในลักษณะที่เป็นปัญหา (ตัวอย่างเช่นตรวจสอบตัวแปรที่ใช้ในตารางสัญลักษณ์หากกำหนดไว้มิฉะนั้นจะสร้างข้อผิดพลาด)

นอกจากนี้ยังใช้ไวยากรณ์ไวตามบริบทในการประมวลผลภาษาธรรมชาติ (NLP) และภาษาธรรมชาติส่วนใหญ่เป็นตัวอย่างของภาษาที่ไวต่อบริบท (ฉันไม่แน่ใจภาษาสันสกฤต )

ฉันจะพยายามอธิบายด้วยตัวอย่างที่งี่เง่าแต่เรียบง่าย (เป็นเพียงความคิดคุณสามารถปรับปรุงได้):

NOUN     -->  { BlueBomber, Grijesh, I, We}
TENSE    -->  { am, was, is, were}
VERB     -->  { going, eating, working}

SENTENCE --> <NOUN> <TENSE> <VERB>

ตอนนี้การใช้ไวยากรณ์นี้เราสามารถสร้างคำสั่งที่ถูกต้อง แต่บางอย่างก็ผิดเช่นกัน ตัวอย่างเช่น,

SENTENCE --> <NOUN>   <TENSE>   <VERB>
             Grijesh    is       working       [Correct statement]

แต่

             Grijesh    am       working       [wrong statement]

เหตุผล: ค่าของ <TENSE> ขึ้นอยู่กับค่า <NOUN> (เช่นI &lt;TENNSE> --> I am) และด้วยเหตุนี้ไวยากรณ์ไม่ได้สร้างคำสั่งที่ถูกต้องในภาษาอังกฤษ

ที่จริงแล้วเราไม่สามารถเขียนไวยากรณ์ที่ไม่มีบริบทสำหรับภาษาอังกฤษที่สมบูรณ์!

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


REFERENCE : คุณสามารถดูดร. อรุณ Kumar ของการบรรยาย ในการบรรยายเขาอธิบายสิ่งที่คุณสนใจ


ขอบคุณสำหรับข้อมูลนี้ไม่ต้องสงสัยเลยว่าจะเป็นประโยชน์สำหรับผู้อื่นที่สนใจในหัวข้อเดียวกันนี้ แต่เพียงบางส่วนที่เกี่ยวข้องกับสิ่งที่ฉันจะถาม ฉันไม่ได้เกี่ยวข้องกับตัวเองด้วยการแยกสตริงที่สร้างโดย CSG แต่เพื่อดูง่าย ๆ - แม้แต่โง่ - ตัวอย่างของ CSG อย่างเป็นทางการที่สร้าง abstractions ที่มีรูปแบบที่ดี ฉันสามารถจินตนาการ CSG เพื่อสร้างสตริง "ภาษาอังกฤษ" ที่ถูกต้องเนื่องจากสัญลักษณ์เดียวสามารถกำหนดข้อตกลงหัวเรื่อง / กริยา แต่ด้วย abstractions ตัวแปรมักจะประกอบด้วยสัญลักษณ์หลายตัว

1
@BlueBomber: ขอบคุณฉันแน่ใจว่าจะตอบคุณคืนในอินเดีย .. ไม่มีความสุขปีใหม่! :)
Grijesh Chauhan

ดูเหมือนว่าฉันสามารถทำได้เพียงจำนวนครั้งที่ จำกัด และตาม (นี้) [ meta.scicomp.stackexchange.com/questions/156/ ......ฉันควรลบคำถามนี้และโพสต์ไว้ในที่ที่เหมาะสมกว่า ...

@BlueBomber ฉันมีการตั้งค่าสถานะเพื่อเปลี่ยนคุณสามารถทำได้
Grijesh Chauhan

1

(ขยายความคิดเห็นเป็นคำตอบ)

ไม่แน่ใจว่านี่เป็นตัวอย่างที่คุณต้องการ

เกือบทุกภาษาโปรแกรมจริงเป็นบริบท - ไว (ในความหมายทั่วไปคือ conflating ทั้งChomsky type-0 และ type-I grammarsภายใต้ "context-sensitive" ซึ่งเป็นจริงแน่นอนเนื่องจากไวยากรณ์ที่ไม่ จำกัดนั้นมีความไวต่อบริบทมากกว่าบริบท -ไวต่อแสงไวยากรณ์)

ตัวอย่างเช่น "ตัวแปรที่ต้องประกาศก่อนใช้", "ตัวระบุควรไม่ซ้ำกัน" ทั้งหมดนี้ต้องใช้บริบท (บางครั้งอ้างถึงเป็นบริบททางความหมาย แต่อาจทำให้เข้าใจผิดได้เนื่องจากมันเกี่ยวข้องกับคุณลักษณะทางไวยากรณ์อยู่แล้ว) ดูตัวอย่างhttps: // www .cs.purdue.edu / บ้าน / ฮอส / 502 / หมายเหตุ / 04 semantics.pdf

ความรู้สึกที่ตัวอย่างข้างต้นมีความอ่อนไหวตามบริบท (ในแง่ไวยากรณ์ / วากยสัมพันธ์เช่นเดียวกับความหมาย) เพราะพวกเขาพูดคุยเกี่ยวกับบริบทของพวกเขา (สิ่งที่มาก่อนหรือมาหลังจาก)

"ตัวแปรที่กำหนดไว้แล้ว" เป็นเรื่องเกี่ยวกับบริบทก่อนหน้าการใช้ตัวแปร "ตัวระบุที่ไม่ซ้ำกัน" เป็นบริบททั้งที่นำหน้าหรือมาหลังจากการประกาศตัวระบุและอื่น ๆ ..

ดูเพิ่มเติมJavaScript เป็นภาษาฟรีหรือไม่ บนดังนั้น


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