Example #1
0
int
main(int argc, char *argv[])
{
	logmath_t *lmath;
	fsg_model_t *fsg;

	/* Initialize a logmath object to pass to fsg_model_read */
	lmath = logmath_init(1.0001, 0, 0);
	/* Read a FSG. */
	fsg = fsg_model_readfile(LMDIR "/goforward.fsg", lmath, 7.5);
	TEST_ASSERT(fsg);

	TEST_ASSERT(fsg_model_add_silence(fsg, "<sil>", -1, 0.3));
	TEST_ASSERT(fsg_model_add_silence(fsg, "++NOISE++", -1, 0.3));
	TEST_ASSERT(fsg_model_add_alt(fsg, "FORWARD", "FORWARD(2)"));

	fsg_model_write(fsg, stdout);

	/* Test reference counting. */
	TEST_ASSERT(fsg = fsg_model_retain(fsg));
	TEST_EQUAL(1, fsg_model_free(fsg));
	fsg_model_write(fsg, stdout);

	TEST_EQUAL(0, fsg_model_free(fsg));
	logmath_free(lmath);

	return 0;
}
Example #2
0
int
main(int argc, char *argv[])
{
	logmath_t *lmath;
	fsg_model_t *fsg;
	jsgf_t *jsgf;
	jsgf_rule_t *rule;

	lmath = logmath_init(1.0001, 0, 0);

	/* Test loading */
	jsgf = jsgf_parse_file(LMDIR "/polite.gram", NULL);
	TEST_ASSERT(jsgf);
	rule = jsgf_get_rule(jsgf, "polite.startPolite");
	TEST_ASSERT(rule);
	fsg = jsgf_build_fsg(jsgf, rule, lmath, 7.5);
	TEST_ASSERT(fsg);
	TEST_EQUAL_STRING("polite", jsgf_grammar_name(jsgf));

	TEST_ASSERT(fsg_model_add_silence(fsg, "<sil>", -1, 0.3));
	TEST_ASSERT(fsg_model_add_silence(fsg, "++NOISE++", -1, 0.3));
	TEST_ASSERT(fsg_model_add_alt(fsg, "please", "please(2)"));

	jsgf_grammar_free(jsgf);
	fsg_model_write(fsg, stdout);
	fsg_model_free(fsg);

	/* Or do everything at once */
	fsg = jsgf_read_file(LMDIR "/public.gram", lmath, 1.0);
	fsg_model_free(fsg);

	/* Test grammar with keywords inside */
	jsgf = jsgf_parse_file(LMDIR "/public.gram", NULL);
	TEST_ASSERT(jsgf);
	jsgf_grammar_free(jsgf);

	jsgf = jsgf_parse_string("#JSGF V1.0; grammar test; public <choice> = yes | no;", NULL);
	TEST_ASSERT(jsgf);
	rule = jsgf_get_rule(jsgf, "test.choice");
	TEST_ASSERT(rule);
	fsg = jsgf_build_fsg(jsgf, rule, lmath, 7.5);
	fsg_model_write(fsg, stdout);
	fsg_model_free(fsg);
	jsgf_grammar_free(jsgf);

	logmath_free(lmath);

	return 0;
}
  ReturnType Recognizer::addGrammar(Integers& id, const Grammar& grammar) {
    if (decoder == NULL) return BAD_STATE;
    std::ostringstream grammar_name;
    grammar_name << grammar_index;
    grammar_names.push_back(grammar_name.str());
    current_grammar = fsg_model_init(grammar_names.back().c_str(), logmath, 1.0, grammar.numStates);
    if (current_grammar == NULL)
      return RUNTIME_ERROR;
    current_grammar->start_state = grammar.start;
    current_grammar->final_state = grammar.end;
    for (int i=0;i<grammar.transitions.size();i++) {
      if (grammar.transitions.at(i).word.size() == 0)
	fsg_model_null_trans_add(current_grammar, grammar.transitions.at(i).from, grammar.transitions.at(i).to, grammar.transitions.at(i).logp);
      else
	fsg_model_trans_add(current_grammar, grammar.transitions.at(i).from, grammar.transitions.at(i).to, grammar.transitions.at(i).logp, fsg_model_word_add(current_grammar, grammar.transitions.at(i).word.c_str()));
    }
    fsg_model_add_silence(current_grammar, "<sil>", -1, 1.0);

    if(ps_set_fsg(decoder, grammar_names.back().c_str(), current_grammar)) {
      return RUNTIME_ERROR;
    }
    if (id.size() == 0) id.push_back(grammar_index);
    else id.at(0) = grammar_index;
    grammar_index++;
    // We switch to the newly added grammar right away
    if (ps_set_search(decoder, grammar_names.back().c_str())) {
      return RUNTIME_ERROR;
    }
    return SUCCESS;
  }