ในวันศุกร์ที่ 2 สิงหาคม การเปิดตัว re2c ซึ่งเป็นโปรแกรมสร้างตัววิเคราะห์คำศัพท์ฟรีสำหรับภาษา C และ C++ ได้รับการเผยแพร่ Re2c เขียนขึ้นในปี 1993 โดย Peter Bamboulis ในฐานะเครื่องกำเนิดการทดลองของเครื่องวิเคราะห์คำศัพท์ที่เร็วมาก แตกต่างจากเครื่องกำเนิดอื่นด้วยความเร็วของโค้ดที่สร้างขึ้นและอินเทอร์เฟซผู้ใช้ที่ยืดหยุ่นผิดปกติซึ่งช่วยให้เครื่องวิเคราะห์สามารถฝังลงในฐานโค้ดที่มีอยู่ได้อย่างง่ายดายและมีประสิทธิภาพ ตั้งแต่นั้นมา โครงการนี้ได้รับการพัฒนาโดยชุมชน และยังคงเป็นเวทีสำหรับการทดลองและการวิจัยในสาขาไวยากรณ์ที่เป็นทางการและเครื่องจักรสถานะจำกัด
นวัตกรรมหลักในเวอร์ชัน 1.2:
-
เพิ่มวิธีใหม่ (แบบง่าย) ในการตรวจสอบการสิ้นสุดของข้อมูลอินพุต
(ภาษาอังกฤษ “กฎ EOF”)
สำหรับสิ่งนี้ ได้มีการเพิ่มการกำหนดค่า re2c:eof แล้ว
ช่วยให้คุณสามารถเลือกอักขระเทอร์มินัล
และกฎ $ พิเศษที่จะเริ่มทำงานหาก lexer
ถึงจุดสิ้นสุดของข้อมูลที่ป้อนเรียบร้อยแล้ว
ในอดีต re2c มีตัวเลือกวิธีการตรวจสอบหลายวิธีให้เลือก
สิ้นสุดอินพุตที่แตกต่างกันในข้อจำกัด ประสิทธิภาพ และความเรียบง่าย
การใช้งาน วิธีการใหม่ได้รับการออกแบบเพื่อให้เขียนโค้ดได้ง่ายขึ้นในขณะที่
ในขณะที่ยังคงมีประสิทธิภาพและนำไปใช้ได้อย่างกว้างขวาง วิธีเก่า
ยังคงใช้งานได้และอาจเป็นที่นิยมในบางกรณี -
เพิ่มความสามารถในการรวมไฟล์ภายนอกโดยใช้คำสั่ง
/*!include:re2c "file.re" */ โดยที่ file.re
นี่คือชื่อของไฟล์รวม Re2c ค้นหาไฟล์ในไดเร็กทอรีไฟล์รวม
เช่นเดียวกับในรายการเส้นทางที่ระบุโดยใช้ตัวเลือก -I
ไฟล์ที่รวมไว้อาจรวมถึงไฟล์อื่นๆ
Re2c จัดเตรียมไฟล์ "มาตรฐาน" ไว้ในไดเร็กทอรี include/
โครงการ - คาดว่าคำจำกัดความที่เป็นประโยชน์จะสะสมอยู่ที่นั่น
นิพจน์ทั่วไป บางอย่างเช่นไลบรารีมาตรฐาน
จนถึงตอนนี้ ตามคำร้องขอของคนงาน ได้มีการเพิ่มไฟล์หนึ่งไฟล์ที่มีคำจำกัดความของหมวดหมู่ Unicode -
เพิ่มความสามารถในการสร้างไฟล์ส่วนหัวโดยพลการ
เนื้อหาโดยใช้ตัวเลือก -t --type-header (หรือเหมาะสม
configurations) และคำสั่งใหม่ /*!header:re2c:on*/ and
/*!header:re2c:off*/. ซึ่งอาจเป็นประโยชน์ในกรณีที่
เมื่อ re2c ต้องการสร้างคำจำกัดความของตัวแปร โครงสร้าง และมาโคร
ใช้ในหน่วยการแปลอื่น ๆ -
ตอนนี้ Re2c เข้าใจตัวอักษร UTF8 และคลาสอักขระในนิพจน์ทั่วไปแล้ว
ตามค่าเริ่มต้น re2c แยกวิเคราะห์นิพจน์เช่น "∀x ∃y" เป็น
ลำดับของอักขระ ASCII 1 บิต e2 88 80 78 20 e2 88 83 79
(รหัสฐานสิบหก) และผู้ใช้ต้องหลีกอักขระ Unicode ด้วยตนเอง:
"u2200x u2203y" สิ่งนี้ไม่สะดวกและคาดไม่ถึงสำหรับหลาย ๆ คน
ผู้ใช้ (ตามที่เห็นได้จากรายงานข้อผิดพลาดอย่างต่อเนื่อง) ดังนั้นตอนนี้
re2c มีตัวเลือก --input-encoding ,
ซึ่งช่วยให้คุณเปลี่ยนพฤติกรรมและแยกวิเคราะห์ "∀x ∃y" เป็น
2200 78 20 2203 79 -
ตอนนี้ Re2c อนุญาตให้ใช้บล็อก re2c ปกติในโหมด -r --reuse
วิธีนี้จะสะดวกหากไฟล์อินพุตมีหลายบล็อกและมีเพียงบางส่วนเท่านั้น
จำเป็นต้องนำมาใช้ซ้ำ -
ตอนนี้คุณสามารถกำหนดรูปแบบของคำเตือนและข้อความแสดงข้อผิดพลาดได้แล้ว
ใช้ตัวเลือก --location-format ใหม่ . รูปแบบ GNU จะปรากฏขึ้น
เป็นชื่อไฟล์:line:column: และรูปแบบ MSVC เป็นชื่อไฟล์(line,column)
คุณสมบัตินี้อาจมีประโยชน์สำหรับผู้ชื่นชอบ IDE
นอกจากนี้ยังมีการเพิ่มตัวเลือก --verbose ซึ่งจะพิมพ์ข้อความชัยชนะสั้นๆ หากสำเร็จ -
โหมด "ความเข้ากันได้" พร้อมดิ้นได้รับการปรับปรุง - ข้อผิดพลาดในการแยกวิเคราะห์บางอย่างได้รับการแก้ไขแล้ว
ลำดับความสำคัญของตัวดำเนินการไม่ถูกต้องในบางกรณี
ในอดีต ตัวเลือก -F --flex-support อนุญาตให้คุณเขียนโค้ดได้
ผสมกันในรูปแบบ flex และ re2c ซึ่งทำให้การแยกวิเคราะห์ทำได้ยากเล็กน้อย
โหมดความเข้ากันได้ของ Flex ไม่ค่อยได้ใช้ในโค้ดใหม่
แต่ re2c ยังคงรองรับความเข้ากันได้แบบย้อนหลัง -
ตัวดำเนินการลบคลาสอักขระ / นำไปใช้แล้ว
ก่อนที่จะขยายการเข้ารหัสซึ่งทำให้สามารถใช้งานได้ในจำนวนที่มากขึ้น
หากใช้การเข้ารหัสความยาวอักขระแบบแปรผัน (เช่น UTF8) -
ตอนนี้ไฟล์เอาต์พุตถูกสร้างขึ้นแบบอะตอมมิก: re2c สร้างไฟล์ชั่วคราวก่อน
และเขียนผลลัพธ์ลงไป จากนั้นเปลี่ยนชื่อไฟล์ชั่วคราวเป็นเอาต์พุต
การดำเนินการหนึ่งครั้ง -
เอกสารประกอบเสร็จสมบูรณ์และเขียนใหม่ โดยเฉพาะอันใหม่ที่ถูกเพิ่มเข้ามา
ภาษาไทย เกี่ยวกับการเติมบัฟเฟอร์
и เกี่ยวกับวิธีการตรวจสอบจุดสิ้นสุดของข้อมูลที่ป้อนเข้า.
เอกสารใหม่จะถูกรวบรวมไว้ในแบบฟอร์ม
คู่มือหนึ่งหน้าที่ครอบคลุม
พร้อมตัวอย่าง (แหล่งเดียวกันถูกแสดงผลใน manpage และในเอกสารออนไลน์)
มีความพยายามที่ไม่ดีในการปรับปรุงความสามารถในการอ่านไซต์บนโทรศัพท์ -
จากมุมมองของนักพัฒนา re2c ได้รับระบบย่อยที่สมบูรณ์ยิ่งขึ้น
การดีบัก ขณะนี้รหัสการดีบักถูกปิดใช้งานในรุ่นรีลีสและ
สามารถเปิดใช้งานได้โดยใช้ตัวเลือกการกำหนดค่า --enable-debug
การเปิดตัวครั้งนี้ใช้เวลานานเกือบทั้งปี
เวลาส่วนใหญ่เช่นเคยถูกใช้ไปกับการพัฒนากรอบทางทฤษฎีและการเขียน
บทความ "การแยก POSIX Submatch ที่มีประสิทธิภาพบน NFA".
อัลกอริธึมที่อธิบายไว้ในบทความถูกนำไปใช้ในไลบรารีทดลอง libre2c
(การสร้างไลบรารีและการวัดประสิทธิภาพจะถูกปิดใช้งานโดยค่าเริ่มต้น และเปิดใช้งานโดยตัวเลือกการกำหนดค่า
--enable-libs) ห้องสมุดไม่ได้ถูกมองว่าเป็นคู่แข่งกับที่มีอยู่
โครงการเช่น RE2 แต่เป็นเวทีการวิจัยเพื่อการพัฒนาสิ่งใหม่
อัลกอริธึม (ซึ่งสามารถใช้ใน re2c หรือในโครงการอื่น ๆ )
นอกจากนี้ยังสะดวกในแง่ของการทดสอบ การวัดประสิทธิภาพ และการสร้างการเชื่อมโยงกับภาษาอื่นๆ
ขอขอบคุณจากนักพัฒนา re2c ถึงทุกคนที่ช่วยให้การเปิดตัวครั้งนี้เกิดขึ้น
และต่อชุมชนโดยทั่วไปสำหรับแนวคิด รายงานข้อผิดพลาด แพตช์ ขวัญกำลังใจ ฯลฯ ;]
ที่มา: linux.org.ru