Я пытаюсь организовать код ocamllex и ocamlyacc для сканирования и синтаксического анализа на простом языке. Я определил абстрактный синтаксис для того же самого, но мне трудно сканировать сложные правила. Вот мой код
{
type exp = B of bool | Const of float | Iszero of exp | Diff of exp*exp |
If of exp * exp * exp
}
rule scanparse = parse
|"true"| "false" as boolean {B boolean}
|['0'-'9']+ "." ['0'-'9']* as num {Const num}
|"iszero" space+ ['a'-'z']+ {??}
|'-' space+ '(' space* ['a'-'z']+ space* ',' space* ['a'-'z']+ space* ')' {??}
Но я не могу получить доступ к определенным частям совпадающей строки. Поскольку объявление выражения является рекурсивным, вложенные функции тоже не помогают (?). Пожалуйста помоги.