X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fcomponents%2Fgrafite_parser%2FgrafiteParser.ml;h=27634f1c3ddbf8b3afd311417d66b986abc4fb93;hb=f167565ea9faf28f4e3d76b8f160fd269cd1aa84;hp=b3e42e63eba5b19d139b2eec70c9930597932507;hpb=cd664aefb80554952ed9b010f0c5199ce3a6f8f2;p=helm.git diff --git a/matita/components/grafite_parser/grafiteParser.ml b/matita/components/grafite_parser/grafiteParser.ml index b3e42e63e..27634f1c3 100644 --- a/matita/components/grafite_parser/grafiteParser.ml +++ b/matita/components/grafite_parser/grafiteParser.ml @@ -27,13 +27,6 @@ module N = NotationPt module G = GrafiteAst -module LE = LexiconEngine - -type 'a localized_option = - LSome of 'a - | LNone of G.loc - -type ast_statement = G.statement let exc_located_wrapper f = try @@ -578,6 +571,7 @@ EXTEND m = LIST0 [ u1 = URI; SYMBOL <:unicode>; u2 = URI -> u1,u2 ] -> G.NCopy (loc,s,NUri.uri_of_string u, List.map (fun a,b -> NUri.uri_of_string a, NUri.uri_of_string b) m) + | lc = lexicon_command -> lc ]]; lexicon_command: [ [ @@ -611,18 +605,10 @@ EXTEND ] ]; statement: [ - [ ex = executable -> - LSome (G.Executable (loc, ex)) - | com = comment -> - LSome (G.Comment (loc, com)) + [ ex = executable -> G.Executable (loc, ex) + | com = comment -> G.Comment (loc, com) | (iloc,fname,mode) = include_command ; SYMBOL "." -> - LSome (G.Executable (loc,G.NCommand (loc,G.Include (iloc,mode,fname)))) - | scom = lexicon_command ; SYMBOL "." -> - assert false -(* - let status = LE.eval_command status scom in - status, LNone loc -*) + G.Executable (loc,G.NCommand (loc,G.Include (iloc,mode,fname))) | EOI -> raise End_of_file ] ]; @@ -631,28 +617,36 @@ EXTEND statement ;; -type db = ast_statement localized_option Grammar.Entry.e ;; +type db = GrafiteAst.statement Grammar.Entry.e ;; class type g_status = object - inherit LexiconTypes.g_status + inherit CicNotationParser.g_status method parser_db: db end class status = - let lstatus = assert false in - let grammar = CicNotationParser.level2_ast_grammar lstatus in - object - inherit LexiconTypes.status - val db = - mk_parser (Grammar.Entry.create grammar "statement") lstatus - method parser_db = db - method set_parser_db v = {< db = v >} + object(self) + inherit CicNotationParser.status ~keywords:[] + val mutable db = None + method parser_db = match db with None -> assert false | Some x -> x + method set_parser_db v = {< db = Some v >} method set_parser_status : 'status. #g_status as 'status -> 'self - = fun o -> {< db = o#parser_db >}#set_lexicon_engine_status o + = fun o -> {< db = Some o#parser_db >}#set_notation_parser_status o + initializer + let grammar = CicNotationParser.level2_ast_grammar self in + db <- Some (mk_parser (Grammar.Entry.create grammar "statement") self) end +let extend status l1 action = + let status = CicNotationParser.extend status l1 action in + let grammar = CicNotationParser.level2_ast_grammar status in + status#set_parser_db + (mk_parser (Grammar.Entry.create grammar "statement") status) +;; + + let parse_statement status = parse_statement status#parser_db