bool Parser::Impl::parseArgument() { // argument := string-list / number / tag if ( !obtainToken() || atEnd() ) return false; if ( token() == Lexer::Number ) { if ( !parseNumber() ) { assert( error() ); return false; } return true; } else if ( token() == Lexer::Tag ) { if ( scriptBuilder() ) scriptBuilder()->taggedArgument( tokenValue() ); consumeToken(); return true; } else if ( isStringToken() ) { if ( scriptBuilder() ) scriptBuilder()->stringArgument( tokenValue(), token() == Lexer::MultiLineString, QString() ); consumeToken(); return true; } else if ( token() == Lexer::Special && tokenValue() == "[" ) { if ( !parseStringList() ) { assert( error() ); return false; } return true; } return false; }
ReturnType Recognizer::init(const Config& config) { parseStringList(HMM_FOLDERS, &acoustic_models, &default_acoustic_model); #ifdef LM_FILES parseStringList(LM_FILES, &language_models, &default_language_model); #endif /* LM_FILES */ #ifdef DICT_FILES parseStringList(DICT_FILES, &dictionaries, &default_dictionary); #endif /* DICT_FILES */ const arg_t cont_args_def[] = { POCKETSPHINX_OPTIONS, { "-argfile", ARG_STRING, NULL, "Argument file giving extra arguments." }, { "-adcdev", ARG_STRING, NULL, "Name of audio device to use for input." }, { "-infile", ARG_STRING, NULL, "Audio file to transcribe." }, { "-time", ARG_BOOLEAN, "no", "Print word times in file transcription." }, CMDLN_EMPTY_OPTION }; std::map<std::string, std::string> parameters; for (int i=0 ; i< config.size() ; ++i) parameters[config[i].key] = config[i].value; if ((parameters.find("-hmm") == parameters.end()) || (acoustic_models.find(parameters["-hmm"]) == acoustic_models.end())) parameters["-hmm"] = default_acoustic_model; if (parameters.find("-bestpath") == parameters.end()) parameters["-bestpath"] = "no"; if (parameters.find("-remove_noise") == parameters.end()) parameters["-remove_noise"] = "no"; int argc = 2 * parameters.size(); char ** argv = new char*[argc]; int index = 0; for (StringsMapIterator i = parameters.begin() ; i != parameters.end(); ++i) { if (isValidParameter(i->first, i->second)) { if (i->first == "-lm") is_fsg = false; argv[index++] = (char*) i->first.c_str(); argv[index++] = (char*) i->second.c_str(); } } cmd_ln_t * cmd_line = cmd_ln_parse_r(NULL, cont_args_def, argc, argv, FALSE); if (cmd_line == NULL) { delete [] argv; return RUNTIME_ERROR; } decoder = ps_init(cmd_line); delete [] argv; if (decoder == NULL) { return RUNTIME_ERROR; } logmath = logmath_init(1.0001, 0, 0); if (logmath == NULL) { return RUNTIME_ERROR; } return SUCCESS; }