Exemple #1
0
HEMP_INLINE HempElement
hemp_fragment_grammar_element(
    HempFragment fragment,
    HempString   name
) {
    return hemp_grammar_element(
        hemp_fragment_grammar(fragment),
        name
    );
}
Exemple #2
0
void test_grammar() {
    Hemp hemp = hemp_new();
    ok( hemp, "created hemp object" );
    
    hemp_language(hemp, HEMP_TT3);
    HempGrammar grammar;

    /* calling this multiple times has no effect */
    hemp_language(hemp, HEMP_TT3);
    hemp_language(hemp, HEMP_TT3);
    hemp_language(hemp, HEMP_TT3);
    hemp_language(hemp, HEMP_TT3);
    hemp_language(hemp, HEMP_TT3);

    HEMP_TRY;
        grammar = hemp_grammar(hemp, "tt3.core");
        ok( grammar, "got grammar" );
        is( grammar->name, "tt3.core", "grammar name is tt3.core" );
        HempElement space = hemp_grammar_element(grammar, "hemp.space");
        ok( space, "got space symbol" );
    HEMP_CATCH_ALL;
        fail("eek! caught error: %s", hemp->error->message);
    HEMP_END;
        
    HEMP_TRY;
        hemp_grammar(hemp, "dud");
        fail("there should be no grammar called 'dud'");
    HEMP_CATCH_ALL;
        pass("caught error for dud grammar");
        ok( 
            hemp_string_eq(hemp->error->message, "Invalid grammar specified: dud"),
            "dud grammar message"
        );
    HEMP_END;
        
    hemp_free(hemp);
}