I’m wondering how I can use MParser to write a parser for a C-like language? The main issue I’m running into is when defining the different kinds statements which need to be mutually recursive:
let rec while_ : (stmt, bytes list) MParser.t = while' >> parens (cond) >>= fun cond -> (braces block) >>= fun bl -> return (While(cond, bl)) and block : (block, bytes list) MParser.t = braces (many statement) and statement : (stmt, bytes list) MParser.t = attempt assign <|> attempt call <|> attempt while_
call have been defined separately and work fine. However,
while_ needs to be mutually recursive with
statement, but this definition violates OCaml’s rules for mutually recursive definitions.
Is there some other way to define rules like this using MParser?