直接消耗一個符合預測的 token consume [local-0]
let consume (predict : Lexer.token) : unit = let tok = next_token () in if tok.value == predict then () else (* raise ... *)
重複解析到失敗為止 many [local-1]
let rec many (p : unit -> 'a) () : 'a list = let x = catch_parse_error p in match x with | None -> [] | Some x -> x :: many p ()
若失敗就解析第二個規則 [local-2]
let ( <|> ) (p1 : unit -> 'a) (p2 : unit -> 'a) () : 'a = match catch_parse_error p1 with | None -> p2 () | Some x -> x