1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/**
* @file MotionNetParser.h
*
* @author <a href="mailto:mellmann@informatik.hu-berlin.de">Heinrich Mellmann</a>
* Declaration of class MotionNetParser
*/

#ifndef __MotionNetParser_h_
#define __MotionNetParser_h_

#include <stdio.h>
#include <stdlib.h>
#include <cctype>
#include <string.h>
#include <vector>

#include "Tools/Math/Common.h"
#include "MotionNet.h"
#include "Scanner.h"
#include "Representations/Infrastructure/JointData.h"


class MotionNetParser
{
public:

  MotionNetParser(Scanner& scanner) 
    : scanner(scanner)
  {}

  ~MotionNetParser(){}

  MotionNet parse();

private:

  enum KeyWordID
  {
    endOfLine,
    separator,
    keyFrame,
    transition,
    comment,
    numberOfKeyWordID
  };

  Scanner& scanner;

  void parseMotionNet(MotionNet& motionNet);

  void parseJointIndex(MotionNet& motionNet);
  void parseKeyFrame(MotionNet& motionNet);
  void parseTransition(MotionNet& motionNet);

  float parseFloat();
  int parseInt();

  std::string getKeyWord(KeyWordID keyWordID);
  bool isToken(KeyWordID tokenId);
  void eat();
  void isTokenAndEat(KeyWordID tokenId);

  void throw_exception(std::string message);
};

#endif //__MotionNetParser_h_