คุณสมบัติพื้นฐานสำหรับภาษาพื้นฐาน? ข้อเสนอแนะ DSL


9

ในที่สุดฉันก็เริ่มเข้าใจความซับซ้อนที่อยู่เบื้องหลังการสร้างล่ามและคอมไพเลอร์ ฉันสร้าง TinyBasic หลายรุ่นรุ่นพื้นฐานปี 1964 (ดาร์ทเมาท์) และการขยายภาษาของฉันเองก่อนที่จะถึงจุดนี้ โครงการล่าสุดคือโครงการที่ฉันเรียกว่าโอเพนซอร์ซพื้นฐาน ... เพราะฉันนึกไม่ออกว่าจะมีฟีเจอร์อื่น ๆ ของภาษาที่น่าสนใจสำหรับผู้คน เพื่อให้สามารถเปิดแหล่งที่มาของภาษาและเข้าใจวิธีการทำสิ่งที่ซับซ้อนบางอย่าง (การสแกนการแยกวิเคราะห์การแปลและการรวบรวม)

Open Source Basic ถูกแปลเป็นภาษาสแต็กเป็นครั้งแรก ภาษาที่ใช้สแต็กนั้นจะถูกตีความและดำเนินการทันทีหรือเปลี่ยนเป็นปฏิบัติการ CLR

คำถามของฉันทั้งหมดต้มลงไปที่นี้:

  • อะไรคือคุณสมบัติพื้นฐาน / โครงสร้างของภาษาพื้นฐาน? ฉันมีโครงสร้างพื้นฐานเหล่านี้อยู่แล้ว: การมอบหมาย, นิพจน์, ตัวแปร, ฟังก์ชั่นบางอย่าง (สุ่ม, ToUpper, ToLower), วนรอบ (สำหรับและทำในขณะที่ / จนกว่า), ถ้า (บล็อกและบรรทัดเดียว) การตัดสินใจอื่น ) และเอาท์พุท (พิมพ์) และรูทีนย่อย (โดยไม่มีพารามิเตอร์)
  • เมื่อฉัน 'เสร็จสิ้น' การเพิ่มโครงสร้างพื้นฐานในภาษาของฉัน - ฉันจะแยกออกได้อย่างไร เป็นโดเมนอะไร กล่าวอีกนัยหนึ่งทิศทางพื้นฐานของภาษาโอเพนซอร์สที่ฉันควรใช้เมื่อฉันมีโครงสร้างทั่วไปทั้งหมดทำงานหรือไม่

ขอขอบคุณสำหรับเวลาของคุณ,

โดมินิค


3
ฉันอยากได้กล่องจดหมายที่มีฟังก์ชั่น AOP ในตัวรองรับไวยากรณ์
FrustratedWithFormsDesigner

@Dominick: แล้วฟังก์ชัน LINQ ล่ะ
Predator

@ เฟร็ด ... AOP - ฟังก์ชันการเขียนโปรแกรมเชิงมุมมอง? คุณยกตัวอย่างได้ไหม
Dominick

5
คุณไม่ควรเริ่มประดิษฐ์ภาษาเฉพาะโดเมนจากคุณสมบัติที่จำเป็นขั้นพื้นฐาน ทำให้โดเมนของคุณเป็นระเบียบเรียบร้อยในตอนแรกเปลี่ยนความรู้นี้เป็นภาษาแล้วเพิ่มคุณสมบัติพื้นฐานหากจำเป็น มีแนวโน้มว่าคุณจะจบลงด้วย DSL ที่สมบูรณ์แบบซึ่งไม่ได้รับการทำให้สมบูรณ์และเป็นหนึ่งในคุณสมบัติที่ดีที่สุดของ DSL
SK-logic

1
แน่นอน "goto" เป็นคุณสมบัติบังคับของพื้นฐานใด ๆ
เพอร์รี

คำตอบ:


1

ประสบการณ์ของฉันกับ BASIC ในช่วงต้นของ Commodore [Vic-20, C-64] ทำให้ฉันรู้สึกว่าหมายเลขบรรทัดเป็น "คุณสมบัติ" หลักของ BASIC ดูเหมือนว่าพวกเขาจะไม่ได้ใช้งานในการใช้งานที่ทันสมัยอีกต่อไปซึ่งสำหรับฉันแล้วเป็นสิ่งที่สร้างความเสียหายเนื่องจากมุมมองหลักของฉันเกี่ยวกับ BASIC เป็นภาษาการเรียนรู้ที่ใช้ในการก้าวสู่สิ่งอื่น


1

ความพยายามอันสูงส่งแน่นอน แต่ฉันคิดว่าคุณมีความสำคัญของคุณกลับรายการ

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

หลังจากที่คุณระบุโดเมนและภาษาของคุณทำงานในโดเมนได้อย่างไรคุณสามารถวางโครงสร้างหรือฟีเจอร์เฉพาะ

ในที่สุดก็อาจจะเป็นประโยชน์ที่จะพิจารณาว่าคุณต้องการDSL ภายในหรือภายนอก


0

ฉันได้พัฒนาภาษาสคริปต์สำหรับแอปพลิเคชัน CAE / FEA และคุณลักษณะบางอย่างที่ฉันพบว่ามีประโยชน์สำหรับผู้ใช้คือตัวแปรท้องถิ่นและระดับโลกการฝึกอบรมที่มีการจัดสรรแบบไดนามิกและการขยายตัวฟังก์ชั่นที่มีข้อโต้แย้ง คุณสมบัติที่คุณพูดถึงตัวเองควรสร้างภาษาที่ทรงพลังตั้งแต่แรก จากนั้นคุณจะพัฒนาตามคำขอของผู้ใช้


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

0

มีคุณสมบัติหลายอย่างที่สามารถเพิ่มหรือขยายได้หากมีอยู่แล้ว แต่ ...

... ภาษาการเขียนโปรแกรมพื้นฐานคล้ายกับภาษาสคริปต์มากและคุณสมบัติที่หลายคนพลาดหรือรวมไว้ในภายหลังคือเนมสเปซหรือโมดูล

C, C ++, PHP, Visual Basic เริ่มต้นโดยไม่มีโมดูล / เนมสเปซและที่เพิ่มในภายหลัง

ถัดไปอาจเป็นรูทีนย่อย (โพรซีเดอร์หรือฟังก์ชันที่ไม่ส่งคืนค่า) และฟังก์ชัน (รูทีนย่อยที่ส่งคืนค่าพิเศษ)


0

เข้าใจวิธีการทำสิ่งที่ซับซ้อน (การสแกนการแยกวิเคราะห์การแปลและการรวบรวม)

มีคำถามที่ดีในเว็บไซต์ Stack Overflow เกี่ยวกับทรัพยากรสำหรับการทำความเข้าใจกับคอมไพเลอร์ นอกจากนี้คุณยังสามารถดูได้ที่ของฉันหน้าชั้นเรียนคอมไพเลอร์

เมื่อฉัน 'เสร็จสิ้น' การเพิ่มโครงสร้างพื้นฐานในภาษาของฉัน - ฉันจะแยกออกได้อย่างไร

ด้วยคุณสมบัติที่คุณได้สร้างขึ้นฉันขอแนะนำให้เพิ่มสามประเภทข้อมูล: int, string, บูลีน คุณจะต้องทำสามสิ่งแต่ละอย่างยากกว่าครั้งก่อนเล็กน้อย:

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

หากเป็นไปด้วยดีฉันแนะนำให้ทำงานในขอบเขต (local ใน sub-routines และ global) แจ้งให้เราทราบหากคุณต้องการคำแนะนำเกี่ยวกับเรื่องนี้

โชคดี. และสนุกสนาน!

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