最近の更新 (Recent Changes)

2012-02-27
2011-05-23
2011-05-22

Latest File Release

Speech Controller Framework (0.1.2)2011-05-22 21:46

単純な計算機プログラム

  1. #include <spcf/core.hpp>
  2. #include <spcf/engine-factory/EngineFactory.hpp>
  3. #include <spcf/grammar/GrammarCommonImpl.hpp>
  4. #include <spcf/grammar/NumeralGrammar.hpp>
  5. #include <spcf/processor/DefaultProcessor.hpp>
  6. #include <spcf/view/DefaultView.hpp>
  7. #include <iostream>
  8. #include <string>
  9. using namespace spcf;
  10. using namespace std;
  11. class CalculatorGrammar : public GrammarCommonImpl {
  12. public:
  13. CalculatorGrammar() : GrammarCommonImpl("calculator") {
  14. Grammar::State s1("s1");
  15. Grammar::State s2("s2");
  16. addGrammarTransition("いち", "number1", 1, Grammar::START_STATE_NAME, s1);
  17. addGrammarTransition("に", "number1", 2, Grammar::START_STATE_NAME, s1);
  18. addGrammarTransition("さん", "number1", 3, Grammar::START_STATE_NAME, s1);
  19. addGrammarTransition("よん", "number1", 4, Grammar::START_STATE_NAME, s1);
  20. addGrammarTransition("しー", "number1", 4, Grammar::START_STATE_NAME, s1);
  21. addGrammarTransition("ごー", "number1", 5, Grammar::START_STATE_NAME, s1);
  22. addGrammarTransition("ろく", "number1", 6, Grammar::START_STATE_NAME, s1);
  23. addGrammarTransition("なな", "number1", 7, Grammar::START_STATE_NAME, s1);
  24. addGrammarTransition("しち", "number1", 7, Grammar::START_STATE_NAME, s1);
  25. addGrammarTransition("はち", "number1", 8, Grammar::START_STATE_NAME, s1);
  26. addGrammarTransition("きゅう", "number1",9, Grammar::START_STATE_NAME, s1);
  27. addGrammarTransition("たす", "operator", "+", s1, s2);
  28. addGrammarTransition("ひく", "operator", "-", s1, s2);
  29. addGrammarTransition("かける", "operator", "*", s1, s2);
  30. addGrammarTransition("わる", "operator", "/", s1, s2);
  31. addGrammarTransition("いち", "number2", 1, s2, Grammar::FINISH_STATE_NAME);
  32. addGrammarTransition("に", "number2", 2, s2, Grammar::FINISH_STATE_NAME);
  33. addGrammarTransition("さん", "number2", 3, s2, Grammar::FINISH_STATE_NAME);
  34. addGrammarTransition("よん", "number2", 4, s2, Grammar::FINISH_STATE_NAME);
  35. addGrammarTransition("しー", "number2", 4, s2, Grammar::FINISH_STATE_NAME);
  36. addGrammarTransition("ごー", "number2", 5, s2, Grammar::FINISH_STATE_NAME);
  37. addGrammarTransition("ろく", "number2", 6, s2, Grammar::FINISH_STATE_NAME);
  38. addGrammarTransition("なな", "number2", 7, s2, Grammar::FINISH_STATE_NAME);
  39. addGrammarTransition("しち", "number2", 7, s2, Grammar::FINISH_STATE_NAME);
  40. addGrammarTransition("はち", "number2", 8, s2, Grammar::FINISH_STATE_NAME);
  41. addGrammarTransition("きゅう", "number2",9, s2, Grammar::FINISH_STATE_NAME);
  42. }
  43. };
  44. class CalculatorProcessor : public DefaultProcessor {
  45. public:
  46. void start(Context& context) {
  47. getController().getEngine()->addGrammar(GrammarPtr(new CalculatorGrammar()));
  48. }
  49. void recognized(Context& context, Recognition& recognition) {
  50. getController().stop();
  51. }
  52. };
  53. class CalculatorView : public DefaultView {
  54. void start(Context& context) {
  55. cout << "start" << endl;
  56. }
  57. void soundStarted(Context& context) {
  58. cout << "soundStarted" << endl;
  59. }
  60. void soundStoped(Context& context) {
  61. cout << "soundStoped" << endl;
  62. }
  63. void recognized(Context& context, Recognition& recognition) {
  64. int number1 = recognition.getProperty("number1")->getInt();
  65. string op = recognition.getProperty("operator")->getString();
  66. int number2 = recognition.getProperty("number2")->getInt();
  67. cout << number1 << op << number2 << "=";
  68. if (op== "+") {
  69. cout << number1 + number2;
  70. } else if (op == "-") {
  71. cout << number1 - number2;
  72. } else if (op == "*") {
  73. cout << number1 * number2;
  74. } else if (op == "/") {
  75. cout << (double(number1) / double(number2));
  76. }
  77. cout << endl;
  78. }
  79. };
  80. int main() {
  81. Controller controller;
  82. controller.setEngine(EngineFactory::getEngine(EngineFactory::SAPI_ENGINE));
  83. controller.setProcessor(ProcessorPtr(new CalculatorProcessor()));
  84. controller.setView(ViewPtr(new CalculatorView()));
  85. controller.start();
  86. return 0;
  87. }

calculator1_grammar.png