เอกสารข้อมูลความปลอดภัยขั้นพื้นฐาน (SDS BASIC)
| เอกสารข้อมูลความปลอดภัยขั้นพื้นฐาน (SDS BASIC) | |
|---|---|
| กระบวนทัศน์ | คำสั่ง |
| ปรากฏครั้งแรก | พ.ศ. 2510 |
| โอเอส | หลาย |
| ได้รับอิทธิพลจาก | |
| ดาร์ทมัธ เบสิก | |
| ได้รับอิทธิพล | |
| HP Time-Sharing BASIC , SCELBALและอื่นๆ อีกมากมาย | |
SDS BASICหรือที่รู้จักกันในชื่อCP-V BASIC , Batch BASICหรือSigma BASICขึ้นอยู่กับเวอร์ชัน เป็นคอมไพเลอร์ภาษาโปรแกรม BASIC สำหรับ คอมพิวเตอร์เมนเฟรมซีรีส์ SigmaของScientific Data Systems (SDS) ซึ่งเปิดตัวครั้งแรกในปี 1967 Xeroxซื้อ SDS ในปี 1969 และเริ่มเปลี่ยนชื่อเป็น Xerox Data Systems และในที่สุดก็เหลือเพียง Xerox ซึ่งในเวลานั้นภาษานี้จึงเป็นที่รู้จักในชื่อXerox BASIC
เวอร์ชันดั้งเดิมไม่ได้รองรับตัวแปรสตริงแม้ว่าจะมีการเพิ่มฟังก์ชันนี้ในเวอร์ชันที่ทำงานภายใต้ระบบปฏิบัติการ CP-Vเมื่อเปิดตัวในปี 1971 ไลบรารีสตริงอนุญาตให้จัดการสตริงโดยใช้ ไวยากรณ์ การแบ่งส่วนอาร์เรย์คล้ายกับระบบที่พบในHP Time-Shared BASIC และภาษา BASIC สำหรับ ไมโครคอมพิวเตอร์หลายภาษาเช่นInteger BASICและAtari BASIC
รูปแบบการจัดการสตริงแบบนี้แตกต่างจากรูปแบบที่ใช้ในBASIC-PLUS ของ DEC ซึ่งใช้ฟังก์ชันสตริงAltair BASICถูกสร้างขึ้นโดยอิงจาก BASIC-PLUS และรูปแบบนี้กลายเป็น มาตรฐาน โดยปริยายหลังจากเวอร์ชันข้ามแพลตฟอร์มอย่างMicrosoft BASICกลายเป็นที่รู้จักอย่างแพร่หลายในช่วง ยุค คอมพิวเตอร์ส่วน บุคคล สิ่งนี้ทำให้การแปลงจาก SDS ไปเป็นภาษาโปรแกรมสมัยใหม่ค่อนข้างยาก
SDS BASIC มีความสำคัญทางประวัติศาสตร์ในฐานะแพลตฟอร์มที่ใช้ในการเขียนเกมคอมพิวเตอร์Star Trek ดั้งเดิมในช่วงฤดูร้อนปี 1971 [ 1 ]
ไวยากรณ์
เพื่อให้สอดคล้องกับแบบจำลอง Dartmouth BASICดั้งเดิมและโดยทั่วไปเหมือนกับ BASIC บน เมนเฟรมส่วน ใหญ่ SDS BASIC เป็นคอมไพเลอร์ ไม่ใช่อินเตอร์พรีเตอร์ และใช้เครื่องมือที่แยกจากกันแต่ผสานรวมกันอย่างแน่นหนาสำหรับการแก้ไขและการรัน ตัวแก้ไขนั้นมีไว้สำหรับ BASIC โดยเฉพาะ เมื่อป้อนบรรทัด ระบบจะวิเคราะห์ไวยากรณ์ที่ถูกต้องและจัดเก็บในรูปแบบโทเค็น หากป้อนบรรทัดที่มีตัวเลขนำหน้า ระบบจะวางบรรทัดนั้นในตำแหน่งที่เหมาะสมในโปรแกรมตามตัวเลขนั้น บรรทัดที่ไม่มีตัวเลขจะถูกประมวลผลทันทีแล้วจึงลืมไป SDS อนุญาตให้ใช้หมายเลขบรรทัดในช่วง 1 ถึง 99999 [ 2 ]ตัวอย่างง่ายๆ คือ:
10 พิมพ์"HELLO WORLD"เช่นเดียวกับ BASIC หลายเวอร์ชัน SDS อนุญาตให้โค้ดบรรทัดเดียวมีคำสั่งหลายคำสั่ง ในภาษาถิ่นส่วนใหญ่จะระบุโดยใช้เครื่องหมายโคลอน แต่ SDS ใช้เครื่องหมายแบ็กสแลช\หรือเครื่องหมายแอมเปอร์แซนด์แทน&[ 3 ] บรรทัดที่เทียบเท่าใน SDS จะเป็นดังนี้:
10 พิมพ์"สวัสดี" \ พิมพ์"โลก"เนื่องจาก SDS เป็นคอมไพเลอร์ และซอร์สโค้ด ของผู้ใช้ ถูกจัดเก็บแยกต่างหาก จึงรักษาระยะห่างนำหน้าในโค้ดไว้ พวกเขาแนะนำให้ใช้วิธีนี้เพื่อระบุโครงสร้างของลูปให้ชัดเจนยิ่งขึ้น: [ 4 ]
10 LET J = 0 , K = 1 20 FOR I = K TO 8 30 PRINT J 40 M = J , J = K , K = K + 1 50 NEXT Iตัวอย่างนี้ยังรวมถึงความสามารถในการตั้งค่าหลายค่าในคำสั่ง LET เดียว ดังที่เห็นในบรรทัดที่ 10 และ 40 คุณสมบัตินี้ยังพบได้ใน HP BASIC เช่นเดียวกับ BASIC เวอร์ชันส่วนใหญ่ คำหลักLETเป็นตัวเลือก และถูกละเว้นในบรรทัดที่ 40 บรรทัดที่ 40 ยังแสดงให้เห็นถึงรูปแบบการกำหนดค่าทางเลือกที่พบใน BASIC รุ่นแรกๆ หลายเวอร์ชัน ซึ่งสามารถแยกการกำหนดค่าหลายรายการด้วยเครื่องหมายจุลภาคได้[ 5 ]
การดำเนินการทางคณิตศาสตร์ทั่วไป ได้แก่+, -, *และ/โดยใช้^หรือ**สำหรับเลขยกกำลัง[ 2 ]การเปรียบเทียบเชิงตรรกะ เช่น HP สามารถเขียนได้ในลำดับใดก็ได้ ดังนั้น<=จึงเทียบเท่ากับ=<และก็><เหมือนกับ[ 3 ]ภาษาถิ่นส่วนใหญ่จะอนุญาตเฉพาะไวยากรณ์แบบหลังในทั้งสองกรณีเท่านั้น ต่างจาก HP BASIC ที่ SDS ไม่ได้รวมความสามารถในการใช้แฮชเป็นรูปแบบอื่นของ<>#<>
SDS รองรับการคำนวณ GOTOโดยใช้ ON แต่ยังอนุญาตให้ใช้ไวยากรณ์ทางเลือกโดยวาง ON ไว้ท้ายบรรทัดแทนที่จะอยู่หน้าบรรทัด:
GOTO 140 , 160 , 180 ON Yรูปแบบอื่นของ REM คือดาวเด่น*[ 6 ] มีวัตถุประสงค์คล้ายกับรูปแบบย่อที่พบใน BASIC ที่ได้มาจาก MS ซึ่งก็คือเครื่องหมาย'อัญประกาศเดี่ยว[ 7 ]
การจัดการสตริง
SDS BASIC เวอร์ชันแรกๆ ซึ่งบางครั้งเรียกว่า Batch BASIC หรือ BTM BASIC ไม่รองรับตัวแปรสตริง อย่างไรก็ตาม สามารถกำหนดค่าสตริงให้กับตัวแปรตัวเลขซึ่งสามารถเก็บอักขระได้หกตัวเป็นค่าตัวเลขEBCDIC [ 8 ] CP-V BASIC รุ่นต่อมาได้เพิ่มตัวแปรสตริงที่แท้จริงซึ่งมีอักขระได้มากถึง 132 ตัว ซึ่งสามารถระบุได้ด้วยเครื่องหมายดอลลาร์ต่อท้าย$หรือในบางกรณี เครื่องหมาย $ นำหน้า—A$และ$Aมีค่าเท่ากัน คู่มือระบุว่ารูปแบบหลังนี้ถูกเพิ่มเข้ามาเพื่อความเข้ากันได้กับ A00 BASIC [ 9 ] [ a ]
ภายใน CP-V ใช้โครงสร้างสตริงความยาวคงที่ซึ่งประกอบด้วยอาร์เรย์ของไบต์ที่ไม่สามารถเปลี่ยนแปลงขนาดได้ในขณะรันไทม์ ซึ่งคล้ายกับภาษา BASIC อื่นๆ ที่ใช้สัญกรณ์การแบ่งส่วน เช่น HP และ Atari ซึ่งแตกต่างจากรูปแบบของ DEC/Microsoft ที่สตริงได้รับการจัดสรรแบบไดนามิกบนฮีปต่างจากภาษา BASIC ความยาวคงที่อื่นๆ ตัวแปรสตริงไม่จำเป็นต้องถูก DIM ก่อนใช้งาน แต่สตริงทั้งหมดจะมีค่าเริ่มต้นความยาวสูงสุด 72 ตัวอักษร นี่เป็นการตั้งค่าทั่วโลกที่สามารถเปลี่ยนแปลงได้เพื่อจัดการหน่วยความจำได้ดีขึ้นโดยการตั้งค่าเป็นค่าที่เล็กกว่า หรืออนุญาตให้ใช้สตริงที่ยาวขึ้นได้สูงสุด 132 ตัวอักษร ซึ่งทำได้โดยใช้ SET SET $=132ที่น่าสับสนคือ SET ยังถูกใช้สำหรับงานที่ไม่เกี่ยวข้องอย่างสิ้นเชิง นั่นคือการอนุญาตให้ใช้ตัวแปรในคำสั่ง DIM [ 10 ]
เนื่องจากสตริงใน CP-V ไม่ได้แสดงตัวเองต่อสาธารณะในรูปแบบอาร์เรย์ของอักขระ ไวยากรณ์การแบ่งส่วนจึงไม่ได้อิงตามไวยากรณ์อาร์เรย์ ซึ่งหมายความว่า CP-V ยังอนุญาตให้สร้างอาร์เรย์ของสตริงได้ ซึ่งเป็นสิ่งที่ภาษาถิ่นอย่าง HP และ Atari ขาดไป เนื่องจากใช้สัญกรณ์อาร์เรย์สำหรับการแบ่งส่วน ดังนั้นจึงสามารถสร้างเมทริกซ์ของสตริงโดยใช้ DIM ได้: [ 9 ]
10 DIM A$ ( 5 , 10 )จะกำหนดเมทริกซ์ที่มีสตริง 72 ตัวอักษรทั้งหมด 50 สตริงในเมทริกซ์ขนาด 5 x 10 เนื่องจากระบบรองรับอาร์เรย์ ไวยากรณ์การแบ่งส่วนจึงซับซ้อนกว่าระบบที่พบในเวอร์ชันอื่นเล็กน้อย ตัวอย่างเช่น: [ 9 ]
A$ ( 1 )เลือกสตริงแรกในอาร์เรย์ของสตริง ในขณะที่:
A$ ( 1 , 5 )เลือกสตริงจากตำแหน่ง 1,5 ในอาร์เรย์ 2 มิติ (เมทริกซ์) การแบ่งส่วนได้รับการจัดการโดยการเพิ่มโคลอนภายในวงเล็บ: [ 9 ]
A$ ( : 4 )คืนค่าทุกอย่างตั้งแต่ตัวอักษรที่ 4 เป็นต้นไป:
A$ ( : 4 , 5 )เลือกอักขระห้าตัวโดยเริ่มจากอักขระตัวที่ 4 ในขณะที่:
A$ ( 1 , 5 : 4 , 5 )เลือกอักขระห้าตัวโดยเริ่มจากอักขระตัวที่ 4 ของสตริงในตำแหน่ง 1,5 ในอาร์เรย์ 2 มิติ[ 9 ]
ค่าคงที่สตริงสามารถกำหนดขอบเขตด้วยเครื่องหมายอัญประกาศเดี่ยวหรือคู่ ทำให้ง่ายต่อการใส่เครื่องหมายอัญประกาศภายในบรรทัด ตัวอย่างที่ถูกต้องได้แก่: [ 11 ]
พิมพ์'นี่คือสตริงตัวอักษร' พิมพ์"นี่คืออีกอันหนึ่ง" พิมพ์'และนี่คือ "อันที่สาม"' พิมพ์"และ 'อันที่สี่'"CP-V ยังรวมถึงคำสั่ง CHANGE จาก Dartmouth BASIC ซึ่งแปลงสตริงเป็นชุด ค่าตัวเลข EBCDICและวางไว้ในอาร์เรย์ตัวเลข: [ 12 ]
10 DIM B ( 6 ) 20 เปลี่ยน"ABCDEF" เป็นBขณะนี้ B จะมีชุดตัวเลขที่สอดคล้องกับค่า EBCDIC สำหรับแต่ละอักขระ[ 12 ]
อินพุต/เอาต์พุต
SDS มีระบบรับ/ส่งข้อมูลที่มีประสิทธิภาพโดยอิงตามหมายเลข "สตรีม" ซึ่งสามารถระบุได้ในคำสั่ง PRINT และ INPUT ตัวอย่างเช่น สามารถอ่านข้อมูลจากไฟล์ได้โดยใช้:
10 เปิด'ไฟล์1' ไปที่ :1,อินพุต20 อินพุต: 1 , Aบรรทัดแรกเปิดไฟล์บนดิสก์ชื่อ "FILE1" กำหนดให้ไฟล์นั้นเป็นสตรีมที่ 1 และระบุว่าจะใช้เป็นข้อมูลป้อนเข้า บรรทัดที่สองอ่านข้อมูลถัดไปจากสตรีมที่ 1 ในกรณีนี้คือค่าแรก และกำหนดข้อมูลที่ได้ให้กับตัวแปร A ระบบยังรวมถึงระบบ "คีย์" ที่ไม่ซ้ำกัน ซึ่งช่วยให้สามารถกำหนดหมายเลขให้กับข้อมูลและเข้าถึงข้อมูลแบบสุ่มได้ โดยทำได้โดยการเพิ่มหมายเลขคีย์หลังเครื่องหมายเซมิโคลอน:
อินพุต: 1 ; 9999 , Aจะพยายามอ่านบันทึก 9999 คีย์ที่ถูกต้องอยู่ในช่วง .001 ถึง 9999.999 และหากไม่มีการกำหนดคีย์ในไฟล์ บรรทัดจะถูกกำหนดหมายเลข 1.000, 2.000 เป็นต้น คีย์ที่มีค่าสูงสุดในไฟล์สามารถอ่านได้โดยใช้: [ 13 ]
กุญแจ( 1 )โดยที่ 1 คือหมายเลขสตรีม[ 13 ]ข้อมูลไบนารีที่ไม่มีโครงสร้างสามารถอ่านและเขียนได้ทีละไบต์โดยใช้ GET และ PUT [ 14 ]
คำสั่ง MAT
เวอร์ชันต่อมาของ Dartmouth BASIC มีชุดMATคำสั่งที่อนุญาตให้ดำเนินการกับอาร์เรย์ทั้งหมด ( เมทริกซ์ ) ด้วยคำสั่งเดียว คำสั่งเหล่านี้มีอยู่ใน SDS BASIC ด้วยเช่นกัน ในรูปแบบที่ง่ายที่สุด จะMATใช้เหมือนกับรูปแบบอื่นของLETโดยใช้นิพจน์กับองค์ประกอบทั้งหมดในอาร์เรย์ ตัวอย่างเช่น:
100 DIM A ( 20 ), B ( 20 ) ... 200 MAT A = A + Bจะนำค่าของทุกค่าใน B ไปบวกกับทุกรายการใน A ในลักษณะเดียวกับ:
100 DIM A ( 20 ), B ( 20 ) ... 200 FOR I = 1 TO 20 210 A ( I ) = A ( I ) + B ( I ) 220 NEXT Iนอกจากจะทำให้โค้ดสั้นลงและชัดเจนขึ้นแล้ว คำสั่งเหล่านี้ยังมีข้อดีคือได้รับการปรับให้เหมาะสมอย่างมาก ทำงานได้ดีกว่าการใช้ FOR/NEXT อย่างเห็นได้ชัด[ 15 ]ฟังก์ชันและคำสั่งเพิ่มเติมจะแก้ไขPRINTและINPUTกลับอาร์เรย์ และสร้างเมทริกซ์เอกลักษณ์และอื่นๆ ในคำสั่งเดียว[ 16 ]
หมายเหตุ
- ↑ A00 ดูเหมือนจะเป็นอีกชื่อหนึ่งของ Batch BASIC โดยที่เครื่องหมาย $ นำหน้าเป็นมาโครสำหรับแปลงค่าเป็น EBCDIC