ฉันกำลังพยายามเขียนตัวแยกวิเคราะห์ DSL ขนาดเล็กโดยใช้ fslex
และ fsyacc
ข้อมูลเข้าประกอบด้วยกลุ่มภาษาสองภาษาที่สลับกันซึ่งต้องใช้กฎ lexing ที่แตกต่างกัน ฉันจะเขียนไฟล์ fslex
เพื่อรองรับสิ่งนั้นได้อย่างไร
(ฉันเดาว่ากรณีที่คล้ายกันคือวิธีกำหนดไฟล์ fslex
สำหรับภาษา c แต่ด้วยการรองรับแอสเซมบลีแบบอินไลน์ซึ่งต้องใช้กฎ lexing ที่แตกต่างกัน?)
สิ่งที่ฉันมีอยู่ในปัจจุบันมีดังนี้:
rule tokenize = parse
| "core" { core lexbuf }
...
and core = parse
| ...
ประเด็นก็คือ เมื่อโทเค็นได้รับการส่งคืนโดยตัวแยกวิเคราะห์ core
ส่วนถัดไปของอินพุตจะถูกส่งไปที่ tokenize
แทน อย่างไรก็ตาม ฉันต้องการที่จะคงอยู่ (เหมือนเดิม) ในสถานะ core
ฉันจะทำอย่างไร?
ขอบคุณ!