単純なifステートメントの構造を複製しようとしています。
if (paren) { block } [else ({ block } | rec if (paren)) ]
if(paren)ブロックの場合、IfBlockASTノードを作成します。それ以外の場合は、IfElseBlockノードを再帰的に埋めます。
私はかなりの数の代替構造を試しました
let parse_if =
suffixparen .>>. suffixblock |>> IfBlock
//>>? attempt (str "else" >>. ifParser) |>> IfElseBlock
//<|> preturn IfBlock
// .>>? attempt (str "else" >>. ifParser) |>> IfElseBlock
// suffixparen .>>. suffixblock |>> IfBlock
// <|> ifParser |>> IfElseBlock
let inlineIf = str_ws "if" >>. parse_if
do ifParserR := inlineIf
提案?