อัลโกล ดับเบิลยู
ALGOL Wเป็นภาษาโปรแกรมมิ่งโดยพัฒนามาจากข้อเสนอของNiklaus WirthและTony Hoare สำหรับ ALGOL Xเพื่อทดแทนALGOL 60 ALGOL W เป็นการปรับปรุง ALGOL 60 เดิมอย่างง่ายๆ โดยเพิ่ม ชนิดข้อมูลสตริงบิตสตริง จำนวนเชิงซ้อนและการอ้างอิง ไปยัง เร คอร์ด รวมถึงการส่งพารามิเตอร์ แบบ เรียกใช้ตามผลลัพธ์แนะนำคำสั่ง แทนที่คำสั่งด้วยคำสั่ง และโดยทั่วไปแล้วเป็นการปรับปรุงภาษาให้กระชับยิ่งขึ้นwhileswitchcase
ผลงานของ Wirth ถือว่ามีความก้าวหน้าน้อยกว่า ALGOL 60 และผลงานที่ซับซ้อนกว่าของAdriaan van Wijngaardenซึ่งต่อมากลายเป็นALGOL 68ได้รับเลือกในการประชุมที่มีการโต้แย้งกันอย่างมาก ต่อมา Wirth ได้เผยแพร่เวอร์ชันของเขาในชื่อ"การมีส่วนร่วมในการพัฒนา ALGOL" [ 1 ] ด้วยการเพิ่มเติมเล็กน้อยหลายประการ ในที่สุดสิ่งนี้ก็กลายเป็น ALGOL W
Wirth ได้กำกับดูแลการใช้งานที่มีคุณภาพสูงสำหรับIBM System/360ที่มหาวิทยาลัยสแตนฟอร์ดซึ่งมีการเผยแพร่อย่างกว้างขวาง[ 2 ] [ 3 ]การใช้งานนี้เขียนด้วย ภาษาแอสเซมบลี PL360 ซึ่ง เป็น ภาษาแอสเซมบลีคล้าย ALGOL ที่ออกแบบโดย Wirth การใช้งานนี้รวมถึง ความสามารถในการดีบักและวิเคราะห์ ประสิทธิภาพที่มีประสิทธิภาพ
ALGOL W เป็นพื้นฐานของ ภาษา Pascalและไวยากรณ์ของ ALGOL W จะคุ้นเคยทันทีสำหรับผู้ที่มีประสบการณ์กับ Pascal ความแตกต่างที่สำคัญคือการปรับปรุงการจัดการเรคอร์ดใน Pascal และที่แปลกคือการสูญเสียความสามารถของ ALGOL W ในการกำหนดความยาวของอาร์เรย์ในขณะรันไทม์ ซึ่งเป็นหนึ่งในคุณสมบัติที่ถูกบ่นมากที่สุดของ Pascal ดั้งเดิม
ไวยากรณ์และความหมาย
ไวยากรณ์ของ ALGOL W สร้างขึ้นจากชุดย่อยของ ชุด การเข้ารหัสอักขระEBCDIC ในALGOL 60คำสงวนถือเป็นรายการคำศัพท์ที่แตกต่างกัน แต่ใน ALGOL W คำสงวนเป็นเพียงลำดับของอักขระ และไม่จำเป็นต้องตัดทอนคำสงวนและตัวระบุจะถูกคั่นด้วยช่องว่าง[ 2 ]ในลักษณะนี้ ไวยากรณ์ของ ALGOL W จึงคล้ายคลึงกับไวยากรณ์ของPascalและภาษารุ่นหลังๆ
คำอธิบายภาษา ALGOL W [ 4 ]กำหนด ALGOL W ในไวยากรณ์คำต่อท้ายที่คล้ายกับรูปแบบ Backus–Naur (BNF) ไวยากรณ์อย่างเป็นทางการ นี้ เป็นต้นแบบของไวยากรณ์Van Wijngaarden [ 1 ] [ 5 ]
ความหมายส่วนใหญ่ของ ALGOL W ถูกกำหนดตามหลักไวยากรณ์: [ 4 ]
- ตัวระบุจะแตกต่างกันตามคำจำกัดความภายในขอบเขต ปัจจุบัน ตัวอย่างเช่น `a`
⟨procedure identifier⟩คือตัวระบุที่ถูกกำหนดโดยการประกาศขั้นตอน `a`⟨label identifier⟩คือตัวระบุที่ใช้เป็นป้ายกำกับคำสั่ง`goto` - ประเภทของตัวแปรและนิพจน์จะถูกแทนด้วยคำต่อท้าย ตัวอย่างเช่นคือหน่วยทางไวยากรณ์สำหรับฟังก์ชันที่ส่งคืนค่าประเภทหากมีการประกาศตัวระบุเป็นฟังก์ชันจำนวนเต็มในขอบเขตปัจจุบัน ก็จะถูกขยายเป็น
⟨τ function identifier⟩τ⟨integer function identifier⟩ - ข้อผิดพลาดเกี่ยวกับชนิดข้อมูลคือข้อผิดพลาดทางไวยากรณ์ ตัวอย่างเช่น
⟨integer expression⟩ / ⟨integer expression⟩และ⟨real expression⟩ / ⟨real expression⟩เป็นหน่วยทางไวยากรณ์ที่ถูกต้องแต่แตกต่างกัน ซึ่งแสดงถึงนิพจน์ แต่⟨real expression⟩ DIV ⟨integer expression⟩(เช่น การหารจำนวนเต็มที่กระทำกับค่าทศนิยม) เป็นหน่วยทางไวยากรณ์ที่ไม่ถูกต้อง
ตัวอย่าง
สิ่งนี้แสดงให้เห็นถึงสิ่งอำนวยความสะดวกประเภท บันทึกของ ALGOL W รวมถึงการใช้การอ้างอิงว่าง[ 2 ]
บันทึกข้อมูลบุคคล( สตริง( 20 ) ชื่อ; อายุจำนวนเต็ม; เพศชายเชิงตรรกะ; อ้างอิง( บุคคล) พ่อ, แม่ , ลูกคนสุดท้อง, พี่น้องคนโต) ;REFERENCE(PERSON)PROCEDUREYOUNGESTUNCLE(REFERENCE(PERSON)R);BEGINREFERENCE(PERSON)P,M;P:=YOUNGESTOFFSPRING(FATHER(FATHER(R)));WHILE(P¬=NULL)AND(¬MALE(P))OR(P=FATHER(R))DOP:=ELDERSIBLING(P);M:=YOUNGESTOFFSPRING(MOTHER(MOTHER(R)));WHILE(M¬=NULL)AND(¬MALE(M))DOM:=ELDERSIBLING(M);IFP=NULLTHENMELSEIFM=NULLTHENPELSEIFAGE(P)<AGE(M)THENPELSEMENDExternal links
- aw2c – ALGOL W compiler for Linux by Glyn Webster
- awe – current version by Glyn Webster
- ALGOL W @ Everything2 – informal but detailed description of the language by a former user, with sidebars extolling ALGOL W over Pascal as an educational programming language
- 1969 ALGOL W compiler listing at bitsavers.org
- The Michigan Terminal System Manuals, Volume 16: ALGOL W in MTS
- ALGOL W materials More than 200 ALGOL W programs and documentation