5
มากับโทเค็นสำหรับ lexer
ฉันกำลังเขียนโปรแกรมแยกวิเคราะห์สำหรับภาษามาร์กอัปที่ฉันสร้างขึ้น (เขียนด้วยภาษาไพ ธ อน แต่นั่นไม่เกี่ยวข้องกับคำถามนี้จริง ๆ แล้วถ้านี่เป็นความคิดที่ไม่ดีฉันชอบคำแนะนำสำหรับเส้นทางที่ดีกว่า) . ฉันกำลังอ่านเกี่ยวกับตัวแยกวิเคราะห์ที่นี่: http://www.ferg.org/parsing/index.htmlและฉันกำลังพยายามเขียน lexer ซึ่งถ้าหากฉันเข้าใจถูกต้องให้แบ่งเนื้อหาออกเป็นโทเค็น สิ่งที่ฉันมีปัญหาในการทำความเข้าใจคือสิ่งที่ฉันควรใช้โทเค็นประเภทใดหรือวิธีการสร้างพวกเขา ตัวอย่างเช่นประเภทโทเค็นในตัวอย่างที่ฉันเชื่อมโยงคือ: STRING IDENTIFIER จำนวน ช่องว่าง แสดงความคิดเห็น EOF สัญลักษณ์จำนวนมากเช่น {และ (นับเป็นประเภทโทเค็นของตัวเอง ปัญหาที่ฉันมีอยู่ก็คือโทเค็นประเภททั่วไปนั้นดูจะเป็นเรื่องที่ฉันไม่ชอบ ตัวอย่างเช่นเหตุใด STRING ถึงมีประเภทโทเค็นแยกต่างหากกับ IDENTIFIER สตริงสามารถแสดงเป็น STRING_START + (IDENTIFIER | WHITESPACE) + STRING_START สิ่งนี้อาจเกี่ยวข้องกับภาษาของฉันด้วย ยกตัวอย่างเช่นการประกาศตัวแปรถูกเขียนเป็นและนำไปใช้กับ{var-name var value} {var-name}ดูเหมือนว่า'{'และ'}'ควรจะราชสกุลของตัวเอง แต่มี var_name และ VAR_VALUE ประเภทโทเค็นมีสิทธิ์หรือจะเหล่านี้ทั้งสองตกอยู่ภายใต้การ IDENTIFIER? มีอะไรเพิ่มเติมคือ VAR_VALUE สามารถมีช่องว่างได้จริง …