+;;
+
+let history = ref [];;
+
+let push () =
+ history :=
+ (!level2_ast_keywords,!level1_pattern_lexer_ref,
+ !level2_ast_lexer_ref,!level2_meta_lexer_ref) :: !history;
+ level2_ast_keywords := initial_level2_ast_keywords ();
+ initialize_keywords ();
+ level1_pattern_lexer_ref := initial_level1_pattern_lexer ();
+ level2_ast_lexer_ref := initial_level2_ast_lexer ();
+ level2_meta_lexer_ref := initial_level2_meta_lexer ();
+;;
+
+let pop () =
+ match !history with
+ | [] -> assert false
+ | (kwd,pl,al,ml) :: tl ->
+ level2_ast_keywords := kwd;
+ level1_pattern_lexer_ref := pl;
+ level2_ast_lexer_ref := al;
+ level2_meta_lexer_ref := ml;
+ history := tl
+;;