Lookahead ในการแยกวิเคราะห์คืออะไร?
Lookahead เป็นคุณลักษณะของภาษาโปรแกรมบางภาษาที่ช่วยให้ parser มองไปข้างหน้าที่โทเค็นหรือโทเค็นถัดไปในอินพุตสตรีม และใช้ข้อมูลนั้นเพื่อกำหนดโครงสร้างของโปรแกรม หรืออีกนัยหนึ่ง lookahead ช่วยให้ parser เห็นว่ามีอะไรเกิดขึ้นบ้าง ถัดไปในสตรีมอินพุตก่อนที่จะแยกวิเคราะห์จริง สิ่งนี้มีประโยชน์สำหรับการแก้ไขความกำกวมในไวยากรณ์ เช่น เมื่อประโยคสามารถแยกวิเคราะห์ได้หลายวิธี
ตัวอย่างเช่น ลองพิจารณาประโยคต่อไปนี้:
"The cat Chased the mouse"
ประโยคนี้มีความคลุมเครือทางไวยากรณ์เพราะสามารถแยกวิเคราะห์ได้ เช่น "แมวไล่หนู" หรือ "ไล่หนูแมว" เพื่อแก้ไขความคลุมเครือนี้ parser อาจใช้ lookahead เพื่อดูโทเค็นถัดไปและพิจารณาว่าการแยกวิเคราะห์ใดถูกต้อง หากโทเค็นถัดไปคือ "the" แสดงว่าการแยกวิเคราะห์ครั้งแรกถูกต้อง แต่หากโทเค็นถัดไปคือ "ไล่" การแยกวิเคราะห์ครั้งที่สองนั้นถูกต้อง
Lookahead สามารถนำไปใช้ในรูปแบบที่แตกต่างกัน ขึ้นอยู่กับภาษาและ parser ที่ใช้งาน เทคนิคทั่วไปบางประการสำหรับการนำ lookahead ไปใช้ ได้แก่:
1 การเรียกซ้ำด้านซ้าย: ในเทคนิคนี้ parser จะเรียกตัวเองซ้ำๆ เพื่อแยกวิเคราะห์อินพุตสตรีมที่เหลือ โดยใช้ข้อมูลที่รวบรวมจากโทเค็นปัจจุบันเพื่อกำหนดวิธีแยกวิเคราะห์โทเค็นถัดไป
2 การเรียกซ้ำทางขวา: ในเทคนิคนี้ parser จะเรียกตัวเองซ้ำๆ เพื่อแยกวิเคราะห์โทเค็นก่อนหน้า โดยใช้ข้อมูลที่รวบรวมจากโทเค็นปัจจุบันเพื่อกำหนดวิธีการแยกวิเคราะห์โทเค็นถัดไป
3 การแยกวิเคราะห์แบบทำนาย: ในเทคนิคนี้ parser ใช้แบบจำลองทางสถิติเพื่อทำนายโทเค็นถัดไปในสตรีมอินพุต และใช้การคาดการณ์นั้นเพื่อเป็นแนวทางในการแยกวิเคราะห์ การแยกวิเคราะห์ CYK: ในเทคนิคนี้ parser จะใช้ตารางค่าเพื่อติดตามแผนผังการแยกวิเคราะห์ที่เป็นไปได้สำหรับสตรีมอินพุต และใช้ข้อมูล lookahead เพื่อตัดพื้นที่การค้นหาและค้นหาแผนผังการแยกวิเคราะห์ที่ถูกต้อง โดยรวมแล้ว lookahead เป็นคุณลักษณะที่ทรงพลังที่ สามารถช่วยผู้แยกวิเคราะห์จัดการกับความคลุมเครือในงานการประมวลผลภาษาธรรมชาติได้ แต่ก็อาจมีราคาแพงในการคำนวณและอาจไม่จำเป็นเสมอไป ขึ้นอยู่กับกรณีการใช้งานเฉพาะ



