View raw

1 (** Parser orchestration. 2 3 Wires the handwritten lexers into the Menhir-generated parsers. *) 4 5 let dummy_pos = 6 { Lexing.pos_fname = ""; pos_lnum = 0; pos_bol = 0; pos_cnum = 0 } 7 8 (** Parse input text into a [Raw_ast.document]. *) 9 let document ~config input = 10 let st = Lexer.create ~config input in 11 let dummy_lexbuf = Lexing.from_string "" in 12 dummy_lexbuf.Lexing.lex_start_p <- dummy_pos; 13 dummy_lexbuf.Lexing.lex_curr_p <- dummy_pos; 14 let token_fun _lexbuf = 15 let tok = Lexer.next_token st in 16 let ln = Lexer.line_number st in 17 dummy_lexbuf.Lexing.lex_start_p <- { dummy_pos with Lexing.pos_lnum = ln }; 18 dummy_lexbuf.Lexing.lex_curr_p <- { dummy_pos with Lexing.pos_lnum = ln }; 19 tok 20 in 21 Parser.document token_fun dummy_lexbuf 22 23 (** Parse inline text into a list of [Ast.inline] objects. *) 24 let inline input = 25 let st = Inline_lexer.create input in 26 let dummy_lexbuf = Lexing.from_string "" in 27 dummy_lexbuf.Lexing.lex_start_p <- dummy_pos; 28 dummy_lexbuf.Lexing.lex_curr_p <- dummy_pos; 29 let token_fun _lexbuf = Inline_lexer.next_token st in 30 try Inline_parser.inline_content token_fun dummy_lexbuf 31 with Inline_parser.Error -> [ Ast.Plain input ] 32