GUIDOLib  1.7.7
Guido Engine Internal Documentation
All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
GuidoParserTest.h
1 /*
2  GUIDO Library
3  Copyright (C) 2013 Grame
4 
5  This Source Code Form is subject to the terms of the Mozilla Public
6  License, v. 2.0. If a copy of the MPL was not distributed with this
7  file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 
9  Grame Research Laboratory, 11, cours de Verdun Gensoul 69002 Lyon - France
10  research@grame.fr
11 
12  */
13 
14 #ifndef __GuidoParser__
15 #define __GuidoParser__
16 
17 #include <istream>
18 #include <string>
19 #include <sstream>
20 #include <locale.h>
21 
22 class TagParameter;
23 class ARMusicalTag;
24 
25 /* \brief a class for reading gmn streams
26 */
27 class GuidoParser {
28 
29  protected:
30 
31  virtual void initScanner();
32  virtual void destroyScanner();
33 
34  int fErrorLine = 0; //< filled in case of syntax error
35  int fErrorColumn = 0; //< filled in case of syntax error
36  std::string fErrorMsg; //< filled in case of syntax error
37 
38  virtual int _yyparse();
39 
40  public:
41  enum vartype { kString, kInt, kFloat };
42 
43  void *fScanner; // the flex scanner
44  std::istream *fStream; // input stream
45  std::string fText; // the current text
46 
47  GuidoParser(std::istream *stream) : fStream(stream) {}
48  virtual ~GuidoParser() {}
49 
50  virtual int parse() {
51  setlocale(LC_NUMERIC, "C");
52  initScanner();
53  int ret =_yyparse ();
55  setlocale(LC_NUMERIC, 0);
56  return ret;
57  }
58  // return the next char in stream or in expanded variable
59  virtual bool get(char & c) {
60  fStream->get(c);
61  return !fStream->eof();
62  }
63 
64  virtual void noteInit (const char *id) {}
65  virtual void tabInit (int n, const char *fret) {}
66  virtual void noteAcc (int n) {}
67  virtual void noteOct (int n) {}
68  virtual void noteEnum (long int n) {}
69  virtual void noteDenom (long int n) {}
70  virtual void noteDot () {}
71  virtual void noteDdot () {}
72  virtual void noteTdot () {}
73  virtual void noteAbsDur (long int n) {}
74  virtual void appendNote () {}
75 
76  virtual void chordInit () {}
77  virtual void chordInitNote () {}
78  virtual void seqAppendChord () {}
79 
80  virtual void seqInit () {}
81  virtual void seqExit () {}
82 
83  virtual void segmInit () {}
84  virtual void segmExit () {}
85  virtual void segmAppendSeq () {}
86 
87  virtual void tagStart (const char* id, long int no) {}
88  virtual void tagIntArg (long int n) {}
89  virtual void tagFloatArg (double r) {}
90  virtual void tagArgUnit (const char* unit) {}
91  virtual void tagStrArg (const char *s) {}
92  virtual void tagAdd () {}
93  virtual void tagAddArg (const char *s) {}
94  virtual void tagEnd () {}
95  virtual void tagRange () {}
96 
97  virtual void tagParameter (TagParameter* param) {}
98  virtual TagParameter* floatParam (float val) { return 0; }
99  virtual TagParameter* floatParam (float val, const char* unit) { return 0; }
100  virtual TagParameter* intParam (int val) { return 0; }
101  virtual TagParameter* intParam (int val, const char* unit) { return 0; }
102  virtual TagParameter* strParam (const char*) { return 0; }
103  virtual TagParameter* varParam (const char* name) { std::cerr << "var param " << name << std::endl; return 0; }
104  virtual void setParamName (TagParameter*, const char*) {}
105 
106  virtual void variableDecl (const char* name, const char* value, vartype type) { std::cerr << "declare variable type " << type << " " << name << ": " << value << std::endl; }
107 
108 
109  virtual bool variableSymbols (const char* name) { std::cerr << "variableSym " << name << std::endl; return true; }
110 
111  virtual void setError(int line, int column, const char *msg)
112  { fErrorLine = line; fErrorColumn = column; fErrorMsg = msg; }
113 
114  virtual int getErrorLine() const { return fErrorLine; }
115  virtual int getErrorColumn() const { return fErrorColumn; }
116  virtual const char* getErrorMsg() const { return fErrorMsg.c_str(); }
117 
118  virtual void parseError(int line, int column, const char* msg) {
119  setError (line, column, msg);
120  std::cerr << "error line: " << line << " col: " << column << ": " << msg << std::endl;
121  }
122 
123 };
124 
125 #endif
GuidoParser::tagStart
virtual void tagStart(const char *id, long int no)
Definition: GuidoParserTest.h:87
GuidoParser::~GuidoParser
virtual ~GuidoParser()
Definition: GuidoParserTest.h:48
GuidoParser::floatParam
virtual TagParameter * floatParam(float val, const char *unit)
Definition: GuidoParserTest.h:99
GuidoParser::get
virtual bool get(char &c)
Definition: GuidoParserTest.h:59
GuidoParser::initScanner
virtual void initScanner()
GuidoParser::noteDdot
virtual void noteDdot()
Definition: GuidoParserTest.h:71
GuidoParser::chordInitNote
virtual void chordInitNote()
Definition: GuidoParserTest.h:77
GuidoParser::parse
virtual int parse()
Definition: GuidoParserTest.h:50
GuidoParser::tagRange
virtual void tagRange()
Definition: GuidoParserTest.h:95
GuidoParser::variableDecl
virtual void variableDecl(const char *name, const char *value, vartype type)
Definition: GuidoParserTest.h:106
GuidoParser::setParamName
virtual void setParamName(TagParameter *, const char *)
Definition: GuidoParserTest.h:104
GuidoParser::noteDenom
virtual void noteDenom(long int n)
Definition: GuidoParserTest.h:69
GuidoParser::tagIntArg
virtual void tagIntArg(long int n)
Definition: GuidoParserTest.h:88
GuidoParser::tagFloatArg
virtual void tagFloatArg(double r)
Definition: GuidoParserTest.h:89
GuidoParser::noteDot
virtual void noteDot()
Definition: GuidoParserTest.h:70
GuidoParser::parseError
virtual void parseError(int line, int column, const char *msg)
Definition: GuidoParserTest.h:118
GuidoParser::noteOct
virtual void noteOct(int n)
Definition: GuidoParserTest.h:67
GuidoParser::tagArgUnit
virtual void tagArgUnit(const char *unit)
Definition: GuidoParserTest.h:90
GuidoParser::vartype
vartype
Definition: GuidoParser.h:56
GuidoParser::seqInit
virtual void seqInit()
Definition: GuidoParserTest.h:80
GuidoParser::segmExit
virtual void segmExit()
Definition: GuidoParserTest.h:84
GuidoParser::intParam
virtual TagParameter * intParam(int val)
Definition: GuidoParserTest.h:100
GuidoParser::floatParam
virtual TagParameter * floatParam(float val)
Definition: GuidoParserTest.h:98
GuidoParser::tagAdd
virtual void tagAdd()
Definition: GuidoParserTest.h:92
GuidoParser::segmAppendSeq
virtual void segmAppendSeq()
Definition: GuidoParserTest.h:85
GuidoParser::tabInit
virtual void tabInit(int n, const char *fret)
Definition: GuidoParserTest.h:65
GuidoParser::destroyScanner
virtual void destroyScanner()
GuidoParser::strParam
virtual TagParameter * strParam(const char *)
Definition: GuidoParserTest.h:102
GuidoParser::tagParameter
virtual void tagParameter(TagParameter *param)
Definition: GuidoParserTest.h:97
GuidoParser::getErrorMsg
virtual const char * getErrorMsg() const
Definition: GuidoParserTest.h:116
GuidoParser::variableSymbols
virtual bool variableSymbols(const char *name)
Definition: GuidoParserTest.h:109
GuidoParser::kString
Definition: GuidoParser.h:56
GuidoParser::setError
virtual void setError(int line, int column, const char *msg)
Definition: GuidoParserTest.h:111
GuidoParser::tagStrArg
virtual void tagStrArg(const char *s)
Definition: GuidoParserTest.h:91
GuidoParser::chordInit
virtual void chordInit()
Definition: GuidoParserTest.h:76
GuidoParser::appendNote
virtual void appendNote()
Definition: GuidoParserTest.h:74
GuidoParser::intParam
virtual TagParameter * intParam(int val, const char *unit)
Definition: GuidoParserTest.h:101
TagParameter
The base class for all guido tags.
Definition: TagParameter.h:26
GuidoParser::fErrorLine
int fErrorLine
Definition: GuidoParser.h:49
GuidoParser::getErrorLine
virtual int getErrorLine() const
Definition: GuidoParserTest.h:114
GuidoParser::noteInit
virtual void noteInit(const char *id)
Definition: GuidoParserTest.h:64
GuidoParser::_yyparse
virtual int _yyparse()
GuidoParser::fScanner
void * fScanner
Definition: GuidoParser.h:71
GuidoParser::getErrorColumn
virtual int getErrorColumn() const
Definition: GuidoParserTest.h:115
ARMusicalTag
The base class for all musical tag classes.
Definition: ARMusicalTag.h:34
GuidoParser::seqAppendChord
virtual void seqAppendChord()
Definition: GuidoParserTest.h:78
GuidoParser::tagEnd
virtual void tagEnd()
Definition: GuidoParserTest.h:94
GuidoParser::noteEnum
virtual void noteEnum(long int n)
Definition: GuidoParserTest.h:68
GuidoParser::GuidoParser
GuidoParser(std::istream *stream)
Definition: GuidoParserTest.h:47
GuidoParser::seqExit
virtual void seqExit()
Definition: GuidoParserTest.h:81
GuidoParser::segmInit
virtual void segmInit()
Definition: GuidoParserTest.h:83
GuidoParser::tagAddArg
virtual void tagAddArg(const char *s)
Definition: GuidoParserTest.h:93
GuidoParser::noteTdot
virtual void noteTdot()
Definition: GuidoParserTest.h:72
GuidoParser::fStream
std::istream * fStream
Definition: GuidoParser.h:72
GuidoParser::fText
std::string fText
Definition: GuidoParser.h:74
GuidoParser::fErrorColumn
int fErrorColumn
Definition: GuidoParser.h:50
GuidoParser::fErrorMsg
std::string fErrorMsg
Definition: GuidoParser.h:51
GuidoParser::kFloat
Definition: GuidoParser.h:56
GuidoParser
Definition: GuidoParser.h:34
GuidoParser::varParam
virtual TagParameter * varParam(const char *name)
Definition: GuidoParserTest.h:103
GuidoParser::noteAbsDur
virtual void noteAbsDur(long int n)
Definition: GuidoParserTest.h:73
GuidoParser::noteAcc
virtual void noteAcc(int n)
Definition: GuidoParserTest.h:66
GuidoParser::kInt
Definition: GuidoParser.h:56

Guido Project Copyright © 2019 Grame-CNCM