อัลกอริทึมที่มีประสิทธิภาพสำหรับการอัพเดตแผนผังการแยกวิเคราะห์


14

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

ขอบคุณล่วงหน้า!


1
สวัสดีและยินดีต้อนรับ! ฉันไม่ได้เป็นผู้เชี่ยวชาญในเรื่องนี้ แต่ผมคิดว่าคำหลักที่คุณกำลังมองหาการแยกที่เพิ่มขึ้นหรือการสะสมเพิ่มขึ้น
MS Dousti

@Sadeq ขอบคุณสำหรับตัวชี้! คุณจะพิจารณาเพิ่มคำตอบด้วยรายละเอียดบางอย่างหรือไม่? มันจะได้รับการชื่นชมอย่างมาก!
Agos

คำตอบ:


9

ตามคำขอ @Agos ฉันเปลี่ยนความคิดเห็นเป็นคำตอบ

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

สำหรับการรักษาที่ปรับปรุงแล้วคุณสามารถดูเอกสารเหล่านี้:

ข้อมูลเพิ่มเติม:มีอย่างน้อยสองวิธีในการแยกวิเคราะห์ / รวบรวม:

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

1

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

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