Bison: การใช้โค้ดหลังกฎ

เฮ้พวก ฉันอยากจะถามคนที่ใช้ภาษาในวัวกระทิง

ใช้เวลานานเท่าใดในการติดตั้งฝั่งโค้ดหลังจากที่คุณทำกฎทั้งหมดเสร็จแล้ว ฉันไม่รู้ว่าควรทำหรือไม่ ขณะนี้ฉันอยู่ที่ 600 LoC (นับส่วนตรงกลางของ %%)

จะต้องใช้เวลานานเท่าใดในการติดตั้งโค้ด? ฉันรู้ว่ามันจะแตกต่างกันไป แต่คุณต้องใช้เวลานานแค่ไหนในการดำเนินการ?

จะใช้เวลาหลายวันไหม? เดือน? หรือหลายเดือน/ปี? หากเกินสองสัปดาห์หรือน้อยกว่านั้น ฉันอาจดำเนินการต่อไปได้ หากเกิน 2 เดือน ฉันจะไม่พิจารณา (อย่างน้อยก็ไม่ใช่ ณ จุดนี้)

แค่ขอประมาณการเท่านั้น ฉันจำเป็นต้องพิจารณาโค้ดที่ได้รับการสนับสนุนด้วย การแปลงภาษาเป็น C++ หรือ C# น่าจะเป็นเรื่องเล็กน้อย อย่างไรก็ตาม ฉันต้องการค่าประมาณเพื่อให้ได้แนวคิดคร่าวๆ


person Community    schedule 11.09.2010    source แหล่งที่มา
comment
คำถามนี้ขึ้นอยู่กับความหมายของไวยากรณ์ของคุณโดยสิ้นเชิง ฉันพบว่าจำนวน 600 ค่อนข้างสูงสำหรับภาษาคู่ที่มีลำดับความซับซ้อนของ C ฉันสงสัยว่าคุณไม่ได้นำเสนอข้อมูลระดับกลางที่มีประสิทธิภาพ   -  person msw    schedule 11.09.2010
comment
สำหรับภาษาที่มีการกำหนดไว้ไม่ดี แม้แต่ไวยากรณ์วัวกระทิงที่มีการกำหนดไว้อย่างดีก็อาจมี › 1KLoC ได้อย่างง่ายดาย ฉันคิดว่า   -  person Johannes Schaub - litb    schedule 11.09.2010
comment
@msw: มันเทียบเท่ากับ C++ แต่การนับรวมช่องว่างเนื่องจากฉันไม่มีวิธีอื่นในการนับบรรทัดอื่นด้วยมือ   -  person    schedule 12.09.2010
comment
litb: นั่นเป็นเหตุผลว่าทำไมฉันถึงอยากรู้จากคนที่ทำมัน ดูเหมือนว่าฉันต้องการเพียงฟังก์ชันหลักบางอย่างและที่เหลือก็แค่จัดรูปแบบพารามิเตอร์ด้วยวิธี/ไวยากรณ์ที่แตกต่างกันเพื่อเรียกฟังก์ชันหลักดังกล่าว ไม่รู้จะยาวหรือเปล่าบอกไม่ได้ นอกจากนี้ยังมีช่องว่างมากมาย   -  person    schedule 12.09.2010


คำตอบ (2)


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

หากคุณวางบางส่วนของโค้ดของคุณ (เริ่มต้นด้วย lexer) เพื่อให้เราดู โดยถามว่ามันเป็นการใช้งานที่ดีของเทคนิคที่กำหนดหรือไม่ (AST, การแยกวิเคราะห์ความคิดเห็น, การอ้างอิงสตริง หรือการหลบหนี อะไรก็ตาม) คุณอาจจะสามารถทำได้ ลดขนาดลงเป็นขนาดที่สามารถจัดการได้มากขึ้นก่อนที่คุณจะเริ่มแขวนโค้ดบนโทเค็น

person Mike DeSimone    schedule 12.09.2010
comment
+1 lexer ก็เป็นสัตว์ร้ายเช่นกัน ตู้ ATM 240 สาย คุณมีความคิดเห็นเกี่ยวกับขนาดของ lexer หรือไม่? - person ; 12.09.2010
comment
ขอย้ำอีกครั้งว่าไม่สามารถพูดโดยไม่รู้ว่าคุณกำลังพยายามทำอะไร เล็กเซอร์สำหรับ SQL สามารถได้รับประโยชน์มหาศาลจากคีย์เวิร์ดทั้งหมด - person Mike DeSimone; 12.09.2010
comment
ภาษาของฉันเองคล้ายกับ C ++ มีเทมเพลต ตัวดำเนินการโอเวอร์โหลดทุกสิ่งที่ C++ มี แต่มีไวยากรณ์ที่แตกต่างกัน (มีข้อขัดแย้ง 0 ข้อ ต้องใช้ไวยากรณ์ที่แตกต่างกันในการทำเช่นนั้น) และคุณสมบัติใหม่บางอย่าง - person ; 13.09.2010
comment
ถ้าอย่างนั้น ฉันพนันได้เลยว่าจะใช้เวลาสองเดือน บวกกับว่าคุณต้องใช้เวลานานแค่ไหนในการเรียนรู้ AST และอาจจะเป็น RTL คุณอาจสามารถดำเนินการบางอย่างขั้นพื้นฐานได้ภายในสองสามสัปดาห์ ซึ่งใช้ได้กับไฟล์อินพุตบางไฟล์ แต่การเขียนโค้ดส่วนใหญ่ของคุณจะต้องจัดการกับข้อผิดพลาดในการป้อนข้อมูลและวิธีจัดการกับข้อผิดพลาดดังกล่าวอย่างสวยงาม ซึ่งใช้เวลานาน เนื่องจากมีบางกรณีที่คุณลืมอยู่เสมอว่าผู้ใช้จะพบ แม้ว่าสิ่งที่คุณทำทั้งหมดคือการแปลเป็น C++ หรือ C# (ระวัง Inner Platform Effect และ Wheel Reinvention) คุณยังคงต้องตรวจจับทุกสิ่งและตรวจสอบให้แน่ใจว่าเอาต์พุตของคุณปราศจากข้อผิดพลาด - person Mike DeSimone; 13.09.2010

คุณเขินอายเกินไปกับสิ่งที่คุณพยายามนำไปใช้

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

คุณขาดประสบการณ์ในการเปลี่ยนแนวคิดภาษาง่ายๆ ให้เป็นรูปแบบที่เหมาะสม หรือคุณมีภาษาเป้าหมายที่ซับซ้อนมากจนใช้งานไม่ได้ กล่าวคือ ถ้ามันยากขนาดนั้นที่จะทำให้คอมไพเลอร์เข้าใจ มนุษย์ก็จะไม่สามารถเข้าใจมันได้เลย

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

การออกแบบภาษาเป็นเรื่องยากมากที่จะทำได้ดี

person msw    schedule 12.09.2010
comment
นี่เป็นสิ่งที่ดีและทั้งหมดยกเว้นกฎทั้งหมดเสร็จสิ้นแล้ว และฉันแค่สงสัยว่าฉันควรจะกระโดดและใช้โค้ดหรือปล่อยให้ตรวจสอบไวยากรณ์เท่านั้น ฉันลองใช้เวอร์ชันไลท์เพื่อทำความเข้าใจวิธีการนำสิ่งต่าง ๆ ไปใช้อย่างถูกต้อง ฉันมี core dumps มากมายในตอนเริ่มต้น ฉันเข้าใจแล้ว แต่อย่างไรก็ตาม ฉันสงสัยว่าจะทำเต็มเวลาในหนึ่งเดือน (แทนที่จะเป็น 2 สัปดาห์) ได้หรือไม่ - person ; 12.09.2010
comment
ถ้าคุณไม่บอกภาษาหรือบอกใบ้ภาษา เราก็ไม่มีอะไรเลย - person msw; 12.09.2010
comment
มันเป็นของฉันเองคล้ายกับ C ++ มีเทมเพลต ตัวดำเนินการโอเวอร์โหลดทุกสิ่งที่ C++ มี แต่มีไวยากรณ์ที่แตกต่างกัน (มีข้อขัดแย้ง 0 ข้อ ต้องใช้ไวยากรณ์ที่แตกต่างกันในการทำเช่นนั้น) และคุณสมบัติใหม่บางอย่าง - person ; 13.09.2010