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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
/*
* Parser.h: interface for the CParser class.
* Eindhoven University of Technology 1997
* OOPS team (Serge vd Boom, Erwin Coumans, Tom Geelen, Wynke Stuylemeier)
* $Id$
* Copyright (c) 1996-2000 Erwin Coumans <coockie@acm.org>
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. Erwin Coumans makes no
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*
*/
#ifndef __INPUTPARSER_H__
#define __INPUTPARSER_H__
class CParser;
#include "Expression.h"
class CParser
{
public:
CParser();
virtual ~CParser();
float GetFloat(STR_String& txt);
CValue* GetValue(STR_String& txt, bool bFallbackToText=false);
CExpression* ProcessText(const char *intext);
void SetContext(CValue* context);
private:
enum symbols {
errorsym,
lbracksym,
rbracksym,
cellsym,
commasym,
opsym,
constsym,
sumsym,
ifsym,
whocodedsym,
eolsym,
idsym
}; // all kinds of symbols
enum optype {
OPmodulus,
OPplus,
OPminus,
OPtimes,
OPdivide,
OPand,
OPor,
OPequal,
OPunequal,
OPgreater,
OPless,
OPgreaterequal,
OPlessequal,
OPnot
}; // all kinds of operators
enum consttype {
booltype,
inttype,
floattype,
stringtype
}; // all kinds of constants
int sym, // current symbol
opkind, // kind of operator, if symbol is an operator
constkind; // kind of operator, if symbol is a constant
char ch; // current character
int chcount; // index to character in input string
CExpression *errmsg; // contains a errormessage, if scanner error
STR_String text, // contains a copy of the original text
const_as_string; // string representation of the symbol, if symbol is a constant
bool boolvalue; // value of the boolean, if symbol is a constant of type boolean
CValue* m_identifierContext;// context in which identifiers are looked up
void ScanError(const char *str);
CExpression* Error(const char *str);
void NextCh();
void TermChar(char c);
void DigRep();
void CharRep();
void GrabString(int start);
void GrabRealString(int start);
void NextSym();
#if 0 /* not used yet */
int MakeInt();
#endif
STR_String Symbol2Str(int s);
void Term(int s);
int Priority(int optor);
CExpression *Ex(int i);
CExpression *Expr();
#ifdef WITH_CXX_GUARDEDALLOC
public:
void *operator new(size_t num_bytes) { return MEM_mallocN(num_bytes, "GE:CParser"); }
void operator delete( void *mem ) { MEM_freeN(mem); }
#endif
};
#endif
|