4
我试图复制一个简单的if语句的结构:解析的if/else/if语句
if (paren) { block } [else ({ block } | rec if (paren)) ]
因为如果(括号)块,我创建了一个IfBlock AST节点。否则,它会递归地填充一个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
建议?
感谢Laurent。对于记录,我也试图结合尝试和<|>%无与无功。 – hammett 2011-06-14 18:26:37