Я пытаюсь написать небольшой синтаксический анализатор DSL, используя fslex
и fsyacc
. Входные данные состоят из чередующихся фрагментов двух разных языков, для которых требуются разные правила лексирования. Как мне написать свой файл fslex
для поддержки этого?
(Думаю, похожим случаем было бы определение файла fslex
для языка c, но с поддержкой встроенного ассемблера, для которого требуются другие правила лексирования?)
То, что у меня есть на данный момент, выглядит примерно так:
rule tokenize = parse
| "core" { core lexbuf }
...
and core = parse
| ...
Дело в том, что как только парсер core
возвращает токен, следующая часть ввода вместо этого передается tokenize
. Однако я хочу остаться (как бы) в состоянии core
. Как я могу это сделать?
Спасибо!