ฉันได้รับมอบหมายงานให้ใช้ภาษาเฉพาะโดเมนสำหรับเครื่องมือที่อาจมีความสำคัญต่อ บริษัท ภาษาที่เรียบง่าย แต่ไม่น่ารำคาญแล้วมันช่วยให้ลูปซ้อนกันสตริง ฯลฯ และมันเป็นจริงให้แน่ใจว่าโครงสร้างอื่น ๆ จะถูกเพิ่มเป็นความก้าวหน้าโครงการ
ฉันรู้โดยประสบการณ์ว่าการเขียน lexer / parser ด้วยมือ - ยกเว้นว่าไวยากรณ์เป็นเรื่องเล็กน้อย - เป็นกระบวนการที่ใช้เวลานานและเกิดข้อผิดพลาดได้ง่าย ดังนั้นฉันจึงเหลือสองตัวเลือก: ตัวแยกวิเคราะห์เครื่องปั่นà la yacc หรือห้องสมุด combinator เช่น Parsec อดีตก็ดีเช่นกัน แต่ฉันเลือกอย่างหลังด้วยเหตุผลต่าง ๆ และนำโซลูชันมาใช้ในภาษาที่ใช้งานได้
ผลลัพธ์ที่ได้นั้นค่อนข้างน่าประทับใจต่อสายตาของฉันรหัสนั้นสั้นกระชับหรูหราและอ่านง่าย / คล่องแคล่ว ฉันยอมรับว่ามันอาจดูแปลก ๆ ถ้าคุณไม่เคยตั้งโปรแกรมในสิ่งอื่นนอกจาก java / c # แต่สิ่งนี้จะเป็นจริงกับสิ่งที่ไม่ได้เขียนใน java / c #
ถึงจุดหนึ่งฉันถูกเพื่อนร่วมงานจู่โจมอย่างแท้จริง หลังจากเหลียวดูหน้าจอของฉันอย่างรวดเร็วเขาก็ประกาศว่ารหัสนั้นไม่สามารถเข้าใจได้และฉันไม่ควรบูรณาการแยกวิเคราะห์ แต่ใช้ stack และ String.Split เหมือนทุกคนทำ เขาทำเสียงดังมากและฉันไม่สามารถโน้มน้าวเขาได้บางส่วนเพราะฉันถูกจับด้วยความประหลาดใจและไม่มีคำอธิบายที่ชัดเจนส่วนหนึ่งเป็นเพราะความคิดเห็นของเขาไม่เปลี่ยนรูป ฉันเสนอให้อธิบายภาษาเขา แต่ก็ไม่มีประโยชน์
ฉันคิดว่าการอภิปรายกำลังจะปรากฏตัวต่อหน้าผู้บริหารอีกครั้งดังนั้นฉันจึงเตรียมข้อโต้แย้งที่มั่นคง
นี่คือเหตุผลสองสามข้อแรกที่มาถึงใจของฉันเพื่อหลีกเลี่ยงการแก้ปัญหาตาม String.Split:
- คุณต้องใช้ ifs จำนวนมากเพื่อจัดการกับกรณีพิเศษและสิ่งต่าง ๆ หมุนวนออกจากการควบคุมอย่างรวดเร็ว
- ดัชนีอาเรย์ฮาร์ดโค้ดจำนวนมากทำให้การบำรุงรักษาเจ็บปวด
- ยากมากที่จะจัดการกับสิ่งต่าง ๆ เช่นการเรียกใช้ฟังก์ชันเป็นอาร์กิวเมนต์เมธอด (เช่นเพิ่ม ((เพิ่ม a, b), c)
- ยากมากที่จะให้ข้อความแสดงข้อผิดพลาดที่มีความหมายในกรณีที่มีข้อผิดพลาดทางไวยากรณ์ (น่าจะเกิดขึ้น)
- ฉันทั้งหมดเพื่อความเรียบง่ายความชัดเจนและการหลีกเลี่ยงสิ่งที่ชาญฉลาดที่ไม่จำเป็น แต่ฉันเชื่อว่ามันเป็นความผิดพลาดที่จะทำให้ทุกส่วนของ codebase ช้าลงดังนั้นแม้แต่เบอร์เกอร์ฟลิปเปอร์ก็สามารถเข้าใจได้ มันเป็นเหตุผลเดียวกับที่ฉันได้ยินว่าไม่ได้ใช้อินเทอร์เฟซไม่แยกความกังวลคัดลอก - วางโค้ด ฯลฯ ความสามารถด้านเทคนิคขั้นต่ำและความเต็มใจที่จะเรียนรู้จำเป็นต้องทำงานในโครงการซอฟต์แวร์หลังจากทั้งหมด (ฉันจะไม่ใช้อาร์กิวเมนต์นี้เพราะอาจฟังดูไม่เหมาะสมและการเริ่มต้นสงครามไม่ได้ช่วยใคร)
อะไรคือข้อโต้แย้งที่คุณชื่นชอบในการแยกวิเคราะห์ภาษาคธูลู ? *
* แน่นอนถ้าคุณสามารถโน้มน้าวฉันได้เขาก็จะมีความสุขเช่นกัน