กลับไปหน้าบทความ

อ่าน 3 นาที

ช่องว่าง (ภาษาโปรแกรม)

ช่องว่างเป็นภาษาการเขียนโปรแกรมเฉพาะ ที่มีไวยากรณ์ที่อักขระช่องว่าง ( ช่องว่างแท็บและขึ้นบรรทัดใหม่ ) เท่านั้นที่มีความหมาย ซึ่งแตกต่างจากภาษาทั่วไปที่ส่วนใหญ่ไม่สนใจอักขระช่องว่าง

ช่องว่าง (ภาษาโปรแกรม)

โปรแกรม Hello Worldที่มีช่องว่างพร้อมการเน้นไวยากรณ์
  แท็บ
  พื้นที่

ช่องว่างเป็นภาษาการเขียนโปรแกรมเฉพาะ ที่มีไวยากรณ์ที่อักขระช่องว่าง ( ช่องว่างแท็และขึ้นบรรทัดใหม่ ) เท่านั้นที่มีความหมาย ซึ่งแตกต่างจากภาษาทั่วไปที่ส่วนใหญ่ไม่สนใจอักขระช่องว่าง[ 1 ] [ 2 ]

เนื่องจากไวยากรณ์ของมันโค้ดต้นฉบับที่ มีช่องว่าง สามารถบรรจุอยู่ภายในช่องว่างของโค้ดที่เขียนในภาษาที่ไม่สนใจช่องว่าง ทำให้ข้อความนั้นเป็นภาษาหลายภาษา[ 2 ]

Whitespace เป็น ภาษา เชิงคำสั่งที่ใช้โครงสร้างข้อมูลแบบสแต็กโปรแกรมเมอร์สามารถผลักค่าจำนวนเต็มที่ มีความกว้างตามต้องการลงบน สแต็กและเข้าถึงฮีปเพื่อจัดเก็บข้อมูลได้

ผู้สร้าง Whitespace ได้จัด เตรียมตัวแปลภาษาพร้อมด้วยซอร์สโค้ดภาษา Haskell ไว้ให้ด้วย

ประวัติศาสตร์

Edwin Brady และ Chris Morris ซึ่งเป็นผู้พัฒนาภาษา Kaya และIdrisได้สร้าง Whitespace ขึ้นในปี 2002 ที่มหาวิทยาลัย Durham Slashdot ได้เผยแพร่บทวิจารณ์ในวัน April Fool's Dayปี 2003 [ 3 ]

แนวคิดในการใช้อักขระเว้นวรรคเป็นตัวดำเนินการสำหรับ ภาษา C++ได้รับการเสนอแนะอย่างขบขันเมื่อ 5 ปีก่อนหน้านี้โดยBjarne Stroustrup [ 4 ]

ไวยากรณ์

คำสั่ง Whitespace กำหนดคำสั่งเป็นลำดับของอักขระเว้นวรรค ตัวอย่างเช่น คำสั่งนี้[Tab][Space][Space][Space]จะทำการบวกเลขระหว่างสององค์ประกอบบนสุดของสแต็ก

คำสั่งจะถูกเขียนเป็นพารามิเตอร์การแก้ไขคำสั่ง (IMP) ตามด้วยการดำเนินการและพารามิเตอร์ใดๆ [ 1 ]

ลำดับ IMP ประกอบด้วย:

อิมพีแดนซ์ความหมาย
[ช่องว่าง]การจัดการสแต็ก
[แท็บ][เว้นวรรค]เลขคณิต
[แท็บ][แท็บ]การเข้าถึงฮีป
[ขึ้นบรรทัดใหม่]การควบคุมการไหล
[แท็บ][ขึ้นบรรทัดใหม่]อินพุต/เอาต์พุต

ลำดับการดำเนินการที่จัดเรียงตาม IMP ประกอบด้วย: [ 1 ]

อิมพีแดนซ์ผู้ปฏิบัติงานพารามิเตอร์ความหมาย ขนาดขั้นต่ำของกองที่ต้องการ*
[ช่องว่าง][ช่องว่าง]ตัวเลขดันตัวเลขลงบนกอง 0
[ช่องว่าง][LF][Space]-คัดลอกรายการบนสุดในกอง 1
[ช่องว่าง][แท็บ][เว้นวรรค]หมายเลขnคัดลอกรายการที่ n บนสแต็ก (ที่กำหนดโดยอาร์กิวเมนต์) ไปไว้ด้านบนสุดของสแต็ก** n +1
[ช่องว่าง][LF][แท็บ]-สลับตำแหน่งของสิ่งของสองชิ้นบนสุดในกอง 2
[ช่องว่าง][LF][LF]-ทิ้งสิ่งของชิ้นบนสุดในกอง 1
[ช่องว่าง][แท็บ][LF]หมายเลขnเลื่อนสิ่งของ n ชิ้นออกจากกอง โดยเก็บสิ่งของชิ้นบนสุดไว้** อาจน้อยกว่าn + 1

แต่ต้องมีอย่างน้อย 1 รายการ (อยู่บนสุดของกอง)

[แท็บ][เว้นวรรค][พื้นที่][พื้นที่]-ส่วนที่เพิ่มเข้าไป 2
[แท็บ][เว้นวรรค][เว้นวรรค][แท็บ]-การลบ 2
[แท็บ][เว้นวรรค][Space][LF]-การคูณ 2
[แท็บ][เว้นวรรค][แท็บ][เว้นวรรค]-การหารจำนวนเต็ม 2 (ค่าสูงสุดอาจไม่ใช่ 0)
[แท็บ][เว้นวรรค][แท็บ][แท็บ]-โมดูลัส2 (ค่าสูงสุดอาจไม่ใช่ 0)
[แท็บ][แท็บ][ช่องว่าง]-จัดเก็บเป็นกอง 2
[แท็บ][แท็บ][แท็บ]-ดึงข้อมูลจากกองข้อมูล 1
[LF][พื้นที่][พื้นที่]ฉลากทำเครื่องหมายตำแหน่งในโปรแกรม 0
[LF][เว้นวรรค][แท็บ]ฉลากเรียกใช้ซับรูทีน 0
[LF][Space][LF]ฉลากข้ามไปยังป้ายกำกับ 0
[LF][แท็บ][เว้นวรรค]ฉลากกระโดดไปยังป้ายกำกับหากด้านบนสุดของสแต็กเป็นศูนย์ 1
[LF][แท็บ][แท็บ]ฉลากกระโดดไปยังป้ายกำกับหากด้านบนสุดของสแต็กเป็นค่าลบ 1
[LF][แท็บ][LF]-สิ้นสุดซับรูทีนและส่งการควบคุมกลับไปยังผู้เรียก 0 (callstack: 1)
[LF][LF][LF]-ยุติโปรแกรม 0
[แท็บ][LF][พื้นที่][พื้นที่]-แสดงอักขระที่อยู่บนสุดของสแต็ก 1
[แท็บ][LF][เว้นวรรค][แท็บ]-แสดงตัวเลขที่อยู่บนสุดของสแต็ก 1
[แท็บ][LF][แท็บ][เว้นวรรค]-อ่านอักขระหนึ่งตัวแล้ววางไว้ในตำแหน่งที่กำหนดโดยส่วนบนสุดของกองอักขระ 1
[แท็บ][LF][แท็บ][แท็บ]-อ่านตัวเลขแล้ววางไว้ในตำแหน่งที่กำหนดโดยด้านบนสุดของกองตัวเลข 1

*เนื่องจาก Haskell ใช้การประเมินแบบเลซี่ (lazily evaluated) ผลกระทบของสแต็กที่เล็กเกินไปอาจปรากฏให้เห็นเฉพาะเมื่อเรียกใช้ฟังก์ชันแสดงผล ตัวเลข เท่านั้น

** มีการเพิ่ม การคัดลอกและ การ เลื่อนใน Whitespace 0.3 [ 1 ]

ความคิดเห็น

อักขระอื่นๆ นอกเหนือจากspace, tabและlinefeedจะถูกละเว้น และสามารถนำไปใช้สำหรับแสดงความคิดเห็นได้

ตัวเลข

ค่าตัวเลขจะถูกแทนด้วยลำดับของ ตัวอักษร 0 spaceและtab1 โดยตัวอักษร 0 แทน 0 และ 1 ตามลำดับ และปิดท้ายด้วยlinefeedเครื่องหมาย 0 ตัวอักษรตัวแรกแทนเครื่องหมายของค่า – space0 สำหรับค่าบวก และ 1 tabสำหรับค่าลบ ตัวอักษรที่อยู่ก่อนเครื่องหมายปิดท้ายแทนตัวเลขฐานสองของค่านั้น

ตัวอย่างเช่น:

  • [space][tab][space][space][tab][space][tab][linefeed] (STSSTSTTL) เป็นค่าบวก เนื่องจากเริ่มต้นด้วยspaceและแทนค่า 1001011 ในเลขฐานสอง ซึ่งเท่ากับ 75 ในเลขฐานสิบ
  • [tab][tab][tab][space][space][tab][space][linefeed] (TTTSSTSL) เป็นค่าลบ เนื่องจากขึ้นต้นด้วยtabและแทนค่า -110010 ในเลขฐานสอง ซึ่งเท่ากับ -50 ในเลขฐานสิบ

ป้ายกำกับ

ป้ายกำกับใช้สำหรับควบคุมการไหล เป็น ลำดับlinefeedของอักขระที่ลงท้ายด้วย - spaceและtabเนื่องจากมีเนมสเปซเพียงแห่งเดียว ป้ายกำกับทั้งหมดจึงต้องไม่ซ้ำกัน [ 1 ]

ตัวอย่างโค้ด

โค้ดต้นฉบับต่อไปนี้เป็น โปรแกรม "Hello, world!" ที่ใช้ช่องว่างเป็นตัวคั่น เพื่อความชัดเจน จึงมีการใส่คำอธิบายประกอบด้วยS, TและLก่อนแต่ละ space, tab, linefeedและ

S S S T S S T S S S L:Push_+1001000=72='H'_onto_the_stack ทีแอล S S :Output_'H';_S S S T T S S T S T L:Push_+1100101=101='e'_onto_the_stack ทีแอล S S :Output_'e';_S S S T T S T T S S L :+1101100=108='l' ทีแอล S S S S S T T S T T S S L :+1101100=108='l' ทีแอล S S S S S T T S T T T T L :+1101111=111='o' ทีแอล S S S S S T S T T S S L :+101100=44=',' ทีแอล S S S S S T S S S S S L:+100000=32=Space ทีแอล S S S S S T T T S T T T L :+1110111=119='w' ทีแอล S S S S S T T S T T T T L :+1101111=111='o' ทีแอล S S S S S T T T S S T S L :+1110010=114='r' ทีแอล S S S S S T T S T T S S L :+1101100=108='l' ทีแอล S S S S S T T S S T S S L =+1100100=100='d' ทีแอล S S S S S T S S S S T L :+100001=33='!' ทีแอล S S :เอาต์พุต_'!';_L แอล L: จบโปรแกรม 

เมื่อแสดงผลโค้ดต้นฉบับที่มีช่องว่างในบางเบราว์เซอร์ ระยะห่างแนวนอนที่เกิดจากอักขระแท็บจะไม่คงที่ แต่ขึ้นอยู่กับตำแหน่งของอักขระแท็บในข้อความเมื่อเทียบกับจุดหยุดแท็บแนวนอน ถัดไป และขึ้นอยู่กับซอฟต์แวร์ อักขระแท็บอาจถูกแทนที่ด้วยอักขระเว้นวรรคจำนวนแปรผันที่สอดคล้องกันได้เช่นกัน

  • เว็บไซต์อย่างเป็นทางการ
  • ประกาศวางจำหน่ายบน Slashdot
  • คลังข้อมูล Whitespace:ชุดของตัวแปลภาษา ตัวคอมไพเลอร์ และโปรแกรมสำหรับ Whitespace
  • ชุดเครื่องมือแปลช่องว่างในภาษาเขียนต่างๆ
  • คอมไพเลอร์ Whitespace.NET - ตัวคอมไพล์โปรแกรม Whitespace ให้เป็นไบต์โค้ด .NET
  • Acme::BleachโมดูลPerlที่เขียนทับส่วนเนื้อหาของโมดูลของคุณให้เป็นการเข้ารหัสเฉพาะช่องว่าง ("เพื่อ โปรแกรมที่สะอาดตา อย่างแท้จริง ")
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Whitespace_(programming_language)&oldid=1336781133 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ช่องว่าง (ภาษาโปรแกรม)

ช่องว่างเป็นภาษาการเขียนโปรแกรมเฉพาะ ที่มีไวยากรณ์ที่อักขระช่องว่าง ( ช่องว่างแท็บและขึ้นบรรทัดใหม่ ) เท่านั้นที่มีความหมาย ซึ่งแตกต่างจากภาษาทั่วไปที่ส่วนใหญ่ไม่สนใจอักขระช่องว่าง

ประวัติศาสตร์

Edwin Brady และ Chris Morris ซึ่งเป็นผู้พัฒนาภาษา Kaya และ Idris ได้สร้าง Whitespace ขึ้นในปี 2002 ที่ มหาวิทยาลัย Durham Slashdot ได้ เผยแพร่บทวิจารณ์ใน วัน April Fool's Day ปี 2003 [ 3 ]

ไวยากรณ์

คำสั่ง Whitespace กำหนดคำสั่งเป็นลำดับของอักขระเว้นวรรค ตัวอย่างเช่น คำสั่งนี้ [Tab][Space][Space][Space] จะทำการบวกเลขระหว่างสององค์ประกอบบนสุดของสแต็ก

ความคิดเห็น

อักขระอื่นๆ นอกเหนือจาก space , tab และ linefeed จะถูกละเว้น และสามารถนำไปใช้สำหรับแสดงความคิดเห็นได้