Welcome to mirror list, hosted at ThFree Co, Russian Federation.

InputParser.h « Expressions « gameengine « source - git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 43832f9c350d26d4475146225ad4ca2e5428f458 (plain)
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
/*
 * 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(STR_String 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 {
		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(STR_String str);
	CExpression* Error(STR_String str);
	void NextCh();
	void TermChar(char c);
	void DigRep();
	void CharRep();
	void GrabString(int start);
	void NextSym();
	int MakeInt();
	STR_String Symbol2Str(int s);
	void Term(int s);
	int Priority(int optor);
	CExpression *Ex(int i);
	CExpression *Expr();

};

#endif