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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
// **********************************************************************
//
// Copyright (c) 2003-2004 ZeroC, Inc. All rights reserved.
//
// This copy of Ice is licensed to you under the terms described in the
// ICE_LICENSE file included in this distribution.
//
// **********************************************************************
#ifndef FREEZE_SCRIPT_GRAMMAR_UTIL_H
#define FREEZE_SCRIPT_GRAMMAR_UTIL_H
#include <FreezeScript/Parser.h>
namespace FreezeScript
{
extern DataFactoryPtr parseDataFactory;
extern ErrorReporterPtr parseErrorReporter;
extern NodePtr parseResult;
extern int parseLine;
int getInput(char*, int);
class StringTok;
class IdentifierTok;
class BoolTok;
class IntegerTok;
class FloatingTok;
class NodeListTok;
typedef ::IceUtil::Handle<StringTok> StringTokPtr;
typedef ::IceUtil::Handle<IdentifierTok> IdentifierTokPtr;
typedef ::IceUtil::Handle<BoolTok> BoolTokPtr;
typedef ::IceUtil::Handle<IntegerTok> IntegerTokPtr;
typedef ::IceUtil::Handle<FloatingTok> FloatingTokPtr;
typedef ::IceUtil::Handle<NodeListTok> NodeListTokPtr;
// ----------------------------------------------------------------------
// Token
// ----------------------------------------------------------------------
class Token : public Node
{
public:
Token() { }
virtual DataPtr evaluate(const SymbolTablePtr&) { return 0; }
virtual void print(std::ostream&) const {}
};
// ----------------------------------------------------------------------
// StringTok
// ----------------------------------------------------------------------
class StringTok : public Token
{
public:
StringTok() { }
std::string v;
};
// ----------------------------------------------------------------------
// BoolTok
// ----------------------------------------------------------------------
class BoolTok : public Token
{
public:
BoolTok() { }
bool v;
};
// ----------------------------------------------------------------------
// IntegerTok
// ----------------------------------------------------------------------
class IntegerTok : public Token
{
public:
IntegerTok() { }
IceUtil::Int64 v;
};
// ----------------------------------------------------------------------
// FloatingTok
// ----------------------------------------------------------------------
class FloatingTok : public Token
{
public:
FloatingTok() { }
double v;
};
class NodeListTok : public Token
{
public:
NodeListTok() { }
NodeList v;
};
} // End of namespace FreezeScript
//
// Stuff for flex and bison
//
#define YYSTYPE FreezeScript::NodePtr
#define YY_DECL int freeze_script_lex(YYSTYPE* yylvalp)
YY_DECL;
int freeze_script_parse();
//
// I must set the initial stack depth to the maximum stack depth to
// disable bison stack resizing. The bison stack resizing routines use
// simple malloc/alloc/memcpy calls, which do not work for the
// YYSTYPE, since YYSTYPE is a C++ type, with constructor, destructor,
// assignment operator, etc.
//
#define YYMAXDEPTH 20000 // 20000 should suffice. Bison default is 10000 as maximum.
#define YYINITDEPTH YYMAXDEPTH // Initial depth is set to max depth, for the reasons described above.
//
// Newer bison versions allow to disable stack resizing by defining
// yyoverflow.
//
#define yyoverflow(a, b, c, d, e, f) freeze_script_error(a)
#endif
|