⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jt_05.cc

📁 这是一个从音频信号里提取特征参量的程序
💻 CC
字号:
// file: $isip/class/asr/JSGFToken/jt_05.cc//// implementation file for Token class//// isip include files//#include "JSGFToken.h"#include <Console.h>//-------------------------------------------------------------------//// private methods////--------------------------------------------------------------------// method: isHeader// check if an input token is a grammar header//boolean JSGFToken::isHeader(const String& arg_a) {  // if starting with a # sign and ending with semi-colon,  // the input string is a header  //  if ((arg_a(0) != '#') || (arg_a(arg_a.length() - 1) != ';')) {    return false;  }  return true;	}// method: isKeyword// check if a input string is a keyword "public"//boolean JSGFToken::isKeyword(const String& arg_a) {    if(arg_a.eq(L"public", true)) {    return true;  }  else {    return false;  }}// method: isGrammarName// check if an input string is a grammar name//boolean JSGFToken::isGrammarName(const String& arg_a) {  String head, gram_name;  long len = arg_a.length();  long start = arg_a.firstNotSpace(7);  long end = arg_a.lastNotSpace(len - 2);  arg_a.substr(head, 0, 7);    arg_a.substr(gram_name, start, end - start + 1);  // make sure the heading word is "grammar" and the ending is semi-colon  //  if ((!head.eq(L"grammar", true)) ||      (arg_a(arg_a.length() - 1) != ';')) {    return false;  }  // the dot cannot be the first or the last character in the name  //  if ((gram_name(0) == '.') ||      (gram_name(gram_name.length() - 1) == '.')) {    return false;  }    return true;}// method: isImportGrammar// check if an input string is an import grammar//boolean JSGFToken::isImportGrammar(const String& arg_a) {  String head, imported_name;  long len = arg_a.length();  long start = arg_a.firstNotSpace(6);  long end = arg_a.lastNotSpace(len - 2);    arg_a.substr(head, 0, 6);  arg_a.substr(imported_name, start, end - start + 1);    // make sure the heading word is "import" and the ending is semi-colon  //  if ((!head.eq(L"import", true)) ||      (arg_a(len - 1) != ';')) {    return false;  }  // make sure the imported name is surrounded by < and > signs  //  if ((imported_name(0) != '<') ||      (imported_name(imported_name.length() - 1) != '>')) {    return false;  }  // make sure the imported name is a dot-separated name  //  long dot_counter = 0;  for (long i = 1; i < imported_name.length() - 1; i++) {    if (imported_name(i) == '.' ) {      dot_counter++;    }  }  if (dot_counter == 0) {    return false;  }  // the dot cannot be the first or the last character in the name  //  if ((imported_name(1) == '.') ||      (imported_name(imported_name.length() - 2) == '.')) {    return false;  }    return true;}// method: isRuleName// check if an input string is a rule name//boolean JSGFToken::isRulename(const String& arg_a) {  // if the input string is surrounded by <>  // the input string is a rule defination  //  Char begin = arg_a(0);  Char end = arg_a(arg_a.length()-1);  if((begin != '<') || (end != '>')) {    return false;  }  // make sure no whitespace is in the rulename  //  for (long i = 1; i < arg_a.length() - 1; i++) {    Char ch(arg_a(i));    if (ch.isSpace()) {      return false;    }  }    // then the input is a legal rulename  //  return true;}// method: isTerminal// check if an input string is a terminal symbol (JSGF "token")//boolean JSGFToken::isTerminal(const String& arg_a) {    // make sure any character in the string is legal for a terminal token  //  for (long i = 0; i < arg_a.length(); i++) {      Char ch = arg_a(i);    if ((ch.isSpace()) || (ch == '"') || (ch == ';')	|| (ch == '=') || (ch == '|') || (ch == '*')	|| (ch == '+') || (ch == '<') || (ch == '>')	|| (ch == '(') || (ch == ')') || (ch == '[')	|| (ch == ']') || (ch == '{') || (ch == '}')	|| (ch == '/')) {            return false;    }  }  return true;}// method: isOperator// check if a input string is one of following operators// =       assign a rule expansion to a rulename// ;       terminate a rule, a header, or a grammar decalration// |       alternative// *       unary, zero or more times// +       unary, one or more times // (       start grouping // )       end grouping // [       start optional grouping // ]       end optional grouping//// @@      self-defined queue marker to indicate self_loop rule extension// ^^      self-defined stack marker to indicate "|" relation of terminals//boolean JSGFToken::isOperator(const String& arg_a){  String tmp = arg_a;  if(tmp.eq(L"=", true) || tmp.eq(L"|", true) || tmp.eq(L";", true) ||     tmp.eq(L"*", true) || tmp.eq(L"+", true) ||     tmp.eq(L"(", true) || tmp.eq(L")", true) ||     tmp.eq(L"[", true) || tmp.eq(L"]", true)) {         return true;  }  else {    return false;  }}// method: isTag// check if a input string is a tag//boolean JSGFToken::isTag(const String& arg_a) {  // check if the input string is delimited by curly brace {}  //  Char begin = arg_a(0);  Char end = arg_a(arg_a.length() - 1);  if(!((begin == '{') && (end == '}'))) {    return false;  }  return true;}// method: isWeight// check if a input string is a weight of the token//boolean JSGFToken::isWeight(const String& arg_a) {    // check if there are slashes starting and ending the input string  //  Char begin = arg_a(0);  Char end = arg_a(arg_a.length() - 1);  if(!((begin == '/') && (end == '/'))) {    return false;  }   // variables  //  String weight;  String delim(L"/ ");  long pos = 0;  boolean dot = false;    // make sure exact one weight value exist and no space in the weight value  //  if (arg_a.countTokens(delim) != 1) {    return false;  }    // cut away white space and the slash delimiters and  // get the sub-string for the value  //  arg_a.tokenize(weight, pos, delim);    for (long i = 0; i < weight.length(); i++) {           // check if the character is a legal part of float or integer number    //    Char ch = weight(i);    // check the first character separately since it can be '+' or '-'    //    if (i == 0 ) {      if (ch.isDigit() || (ch == '.') || (ch == '+') || (ch == '-' )) {	if (ch == '.') {	  dot = true;	}      }      else {	return false;      }    }    // then check the others    //    else {      if (ch.isDigit() || ((ch == '.') && (!dot))) {	if (ch == '.') {	  dot = true;	}      }      else {	return false;      }    }  } // end: for (long i = 0; i < weight.length(); i++)  // gracefully exit  //  return true;}// method: isQuotedToken// check if an input string is a JSGF quoted token//boolean JSGFToken::isQuotedToken(const String& arg_a) {  long len = arg_a.length();    // make sure the input string starting and ending with " sign  //  if ((arg_a(0) != '"') || (arg_a(len - 1) != '"')) {    return false;  }      // make sure any character is legal in a quoted token  //  boolean empty = true;  for (long i = 1; i < len - 1; i++) {      Char ch = arg_a(i);    if (!ch.isSpace()) {      empty = false;    }  }  // make sure between the quote symbols is not empty  //  if (empty) {    return false;  }    return true;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -