/** * test_visitor_register_identity: * @fn test_visitor_register_identity * Tests whether compilerkit_visitor_register_identity function works as intended. * @pre None * @param None * @return void */ void test_visitor_register_identity (void) { GObject *symbol; GObject *empty_set; CompilerKitVisitor *visitor; g_test_message ("Testing visitor register identity"); g_test_timer_start (); symbol = compilerkit_symbol_new ('a'); empty_set = compilerkit_empty_set_get_instance (); visitor = compilerkit_visitor_new(); // Register the identity function (it returns whatever GObject* gets as a parameter during the visit) compilerkit_visitor_register_identity (visitor, COMPILERKIT_TYPE_EMPTY_SET); // Since we didn't register the symbol, the visitor should return NULL g_assert (compilerkit_visitor_visit (visitor, symbol) == NULL); // The visitor should produce symbol here, since we registered the identity function for the symbol class. g_assert (compilerkit_visitor_visit (visitor, empty_set) == empty_set); // Decrease the reference count for objects to free them. g_object_unref (symbol); g_object_unref (empty_set); g_object_unref (visitor); // This test shouldn't take too long to run g_assert_cmpfloat(g_test_timer_elapsed (), <=, 1); }
/* Construct a visitor that checks whether symbol is a symbol. */ static CompilerKitVisitor* check_symbol () { CompilerKitVisitor *visitor; visitor = compilerkit_visitor_new(); compilerkit_visitor_register (visitor, COMPILERKIT_TYPE_SYMBOL, symbol_check); return visitor; }
/** * compilerkit_to_nfa_visitor: * @fn compilerkit_to_nfa_visitor * Construct a to_nfa visitor. * @pre None * @param None * @return A CompilerKitVisitor*. * @memberof CompilerKitVisitor */ CompilerKitVisitor *compilerkit_to_nfa_visitor () { CompilerKitVisitor *visitor; visitor = compilerkit_visitor_new(); /* Regular expression visitors */ compilerkit_visitor_register (visitor, COMPILERKIT_TYPE_ALTERNATION, to_nfa_alternation); compilerkit_visitor_register (visitor, COMPILERKIT_TYPE_CONCATENATION, to_nfa_concatenation); compilerkit_visitor_register (visitor, COMPILERKIT_TYPE_KLEENE_STAR, to_nfa_kleene_star); compilerkit_visitor_register (visitor, COMPILERKIT_TYPE_COMPLEMENT, to_nfa_complement); compilerkit_visitor_register (visitor, COMPILERKIT_TYPE_EMPTY_SET, to_nfa_empty_set); compilerkit_visitor_register (visitor, COMPILERKIT_TYPE_EMPTY_STRING, to_nfa_empty_string); compilerkit_visitor_register (visitor, COMPILERKIT_TYPE_SYMBOL, to_nfa_symbol); /* CFG visitors */ compilerkit_visitor_register (visitor, COMPILERKIT_TYPE_GRAMMAR, to_nfa_grammar); compilerkit_visitor_register (visitor, COMPILERKIT_TYPE_NONTERMINAL, to_nfa_concatenation); compilerkit_visitor_register (visitor, COMPILERKIT_TYPE_TERMINAL, to_nfa_kleene_star); compilerkit_visitor_register (visitor, COMPILERKIT_TYPE_PRODUCTION, to_nfa_production); return visitor; }
/* StringBuilder visitor */ static CompilerKitVisitor *compilerkit_string_builder_visitor () { CompilerKitVisitor *visitor; visitor = compilerkit_visitor_new(); /* Regular expression visitors */ compilerkit_visitor_register (visitor, COMPILERKIT_TYPE_ALTERNATION, string_builder_alternation); compilerkit_visitor_register (visitor, COMPILERKIT_TYPE_CONCATENATION, string_builder_concatenation); compilerkit_visitor_register (visitor, COMPILERKIT_TYPE_KLEENE_STAR, string_builder_kleene_star); compilerkit_visitor_register (visitor, COMPILERKIT_TYPE_COMPLEMENT, string_builder_complement); compilerkit_visitor_register (visitor, COMPILERKIT_TYPE_EMPTY_SET, string_builder_empty_set); compilerkit_visitor_register (visitor, COMPILERKIT_TYPE_EMPTY_STRING, string_builder_empty_string); compilerkit_visitor_register (visitor, COMPILERKIT_TYPE_SYMBOL, string_builder_symbol); /* CFG visitors */ compilerkit_visitor_register (visitor, COMPILERKIT_TYPE_GRAMMAR, string_builder_grammar); compilerkit_visitor_register (visitor, COMPILERKIT_TYPE_NONTERMINAL, string_builder_nonterminal); compilerkit_visitor_register (visitor, COMPILERKIT_TYPE_TERMINAL, string_builder_terminal); compilerkit_visitor_register (visitor, COMPILERKIT_TYPE_PRODUCTION, string_builder_production); compilerkit_visitor_set_state (visitor, g_string_new("")); return visitor; }