การเปิดตัวตัวสร้างเครื่องวิเคราะห์คำศัพท์ re2c 1.2

ไปยังสถานที่ ปล่อย รีทูซีซึ่งเป็นเครื่องสร้างตัววิเคราะห์คำศัพท์ฟรีสำหรับภาษา C และ C++ โปรดจำไว้ว่า re2c เขียนขึ้นในปี 1993 โดย Peter Bambulis ในฐานะเครื่องกำเนิดการทดลองของเครื่องวิเคราะห์คำศัพท์ที่เร็วมาก แตกต่างจากเครื่องกำเนิดอื่นในเรื่องความเร็วของโค้ดที่สร้างขึ้น และอินเทอร์เฟซผู้ใช้ที่ยืดหยุ่นผิดปกติซึ่งช่วยให้เครื่องวิเคราะห์สามารถรวมเข้ากับเครื่องที่มีอยู่ได้อย่างง่ายดายและมีประสิทธิภาพ ฐานรหัส ตั้งแต่นั้นมา โครงการนี้ได้รับการพัฒนาโดยชุมชน และยังคงเป็นเวทีสำหรับการทดลองและการวิจัยในสาขาไวยากรณ์ที่เป็นทางการและเครื่องจักรสถานะจำกัด

การเตรียมการสำหรับการเปิดตัวใช้เวลาเกือบทั้งปี เวลาส่วนใหญ่เช่นเคยถูกใช้ไปกับการพัฒนากรอบทางทฤษฎีและการเขียน
บทความ "การแยก POSIX Submatch ที่มีประสิทธิภาพบน NFA"
อัลกอริธึมที่อธิบายไว้ในบทความถูกนำไปใช้ในไลบรารีทดลอง libre2c
(การสร้างไลบรารีและการทดสอบประสิทธิภาพถูกปิดใช้งานโดยค่าเริ่มต้น และเปิดใช้งานโดยตัวเลือกการกำหนดค่า “—enable-libs”) ห้องสมุดไม่ได้มีวัตถุประสงค์เพื่อเป็นคู่แข่งกับโครงการที่มีอยู่เช่น RE2 แต่เป็นแพลตฟอร์มการวิจัยสำหรับการพัฒนาโครงการใหม่
อัลกอริธึม (ซึ่งสามารถใช้ใน re2c หรือในโครงการอื่น ๆ ) นอกจากนี้ยังสะดวกในแง่ของการทดสอบ การวัดประสิทธิภาพ และการสร้างการเชื่อมโยงกับภาษาอื่นๆ

นวัตกรรมหลักในเวอร์ชัน re2c 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*/" และ
    "/*!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 {ascii | utf8}",
    ซึ่งช่วยให้คุณเปลี่ยนพฤติกรรมและแยกวิเคราะห์ “∀x ∃y” เป็น
    “2200 78 20 2203 79”

  • ตอนนี้ Re2c อนุญาตให้ใช้บล็อก re2c ปกติในโหมด "-r --reuse"
    วิธีนี้จะสะดวกหากไฟล์อินพุตมีหลายบล็อกและมีเพียงบางส่วนเท่านั้น
    จำเป็นต้องนำมาใช้ซ้ำ

  • ตอนนี้คุณสามารถกำหนดรูปแบบของคำเตือนและข้อความแสดงข้อผิดพลาดได้แล้ว
    ใช้ตัวเลือกใหม่ "--location-format {gnu | msvc}" รูปแบบ GNU จะปรากฏขึ้น
    เป็น "ชื่อไฟล์:บรรทัด:คอลัมน์:" และรูปแบบ MSVC เป็น "ชื่อไฟล์(บรรทัด,คอลัมน์)"
    คุณสมบัตินี้อาจมีประโยชน์สำหรับผู้ชื่นชอบ IDE
    นอกจากนี้ยังมีการเพิ่มตัวเลือก "--verbose" ซึ่งจะแสดงข้อความชัยชนะสั้นๆ หากทำสำเร็จ

  • โหมด "ความเข้ากันได้" พร้อมดิ้นได้รับการปรับปรุง - ข้อผิดพลาดในการแยกวิเคราะห์บางอย่างได้รับการแก้ไขแล้ว
    ลำดับความสำคัญของตัวดำเนินการไม่ถูกต้องในบางกรณี
    ในอดีต ตัวเลือก "-F --flex-suppor" อนุญาตให้คุณเขียนโค้ดได้
    ผสมกันในรูปแบบ flex และ re2c ซึ่งทำให้การแยกวิเคราะห์ทำได้ยากเล็กน้อย
    โหมดความเข้ากันได้ของ Flex ไม่ค่อยได้ใช้ในโค้ดใหม่
    แต่ re2c ยังคงรองรับความเข้ากันได้แบบย้อนหลัง

  • ตอนนี้ใช้ตัวดำเนินการลบคลาสอักขระ "/" แล้ว
    ก่อนที่จะขยายการเข้ารหัสซึ่งทำให้สามารถใช้งานได้ในจำนวนที่มากขึ้น
    หากใช้การเข้ารหัสความยาวอักขระแบบแปรผัน (เช่น UTF8)

  • ตอนนี้ไฟล์เอาต์พุตถูกสร้างขึ้นแบบอะตอมมิก: re2c สร้างไฟล์ชั่วคราวก่อน
    และเขียนผลลัพธ์ลงไป จากนั้นเปลี่ยนชื่อไฟล์ชั่วคราวเป็นเอาต์พุต
    การดำเนินการหนึ่งครั้ง

  • เอกสารประกอบเสร็จสมบูรณ์และเขียนใหม่ โดยเฉพาะอันใหม่ที่ถูกเพิ่มเข้ามา
    บทที่เกี่ยวกับ http://re2c.org/manual/manual.html#buffer-refilling заполнение буфера
    и เกี่ยวกับวิธีการตรวจสอบจุดสิ้นสุดของข้อมูลที่ป้อนเข้า.
    เอกสารใหม่จะถูกรวบรวมไว้ในแบบฟอร์ม
    คู่มือหน้าเดียวที่ครอบคลุม
    พร้อมตัวอย่าง (แหล่งเดียวกันถูกแสดงผลใน manpage และในเอกสารออนไลน์)
    มีความพยายามที่ไม่ดีในการปรับปรุงความสามารถในการอ่านไซต์บนโทรศัพท์

  • จากมุมมองของนักพัฒนา re2c ได้รับระบบย่อยที่สมบูรณ์ยิ่งขึ้น
    การดีบัก ขณะนี้รหัสการดีบักถูกปิดใช้งานในรุ่นรีลีสและ
    สามารถเปิดใช้งานได้โดยใช้ตัวเลือกกำหนดค่า "--enable-debug"

ที่มา: opennet.ru

เพิ่มความคิดเห็น