Scanframe Modular Application 0.1.0
Loading...
Searching...
No Matches
ScriptEngine.h
Go to the documentation of this file.
1#pragma once
3#include <misc/gen/TStrings.h>
4#include <misc/global.h>
5
6namespace sf
7{
8
13{
14 public:
19
97
101 bool calculate(const std::string& script, Value& result);
102
106 [[nodiscard]] EArithError getError() const
107 {
108 return _errorValue;
109 }
110
114 [[nodiscard]] std::string getErrorReason() const;
115
119 bool setError(EArithError error_value, const std::string& reason = std::string());
120
126 [[nodiscard]] const char* getErrorText(EArithError error_value = EArithError::aeCurrent) const;
127
131 [[nodiscard]] pos_type getPos() const
132 {
133 return _pos;
134 }
135
139 [[nodiscard]] virtual strings getInfoNames() const;
140
147 [[nodiscard]] const IdInfo* getInfo(const std::string& name) const override;
148
154 [[nodiscard]] virtual strings getIdentifiers(EIdentifier id) const;
155
156 protected:
162 bool getSetValue(const IdInfo* info, Value* value, Value::vector_type* params, bool flag_set) override;
163
167 bool isAlpha(char ch);
168
169 private:
173 void destroyObject(bool& should_delete) override
174 {
175 should_delete = false;
176 }
177
181 struct DataCode
182 {
183 explicit DataCode(ScriptObject* object)
184 {
185 Clear(object);
186 }
187
188 void Clear(ScriptObject* object)
189 {
190 _info = nullptr;
191 _object = object;
192 }
193
194 explicit operator bool() const
195 {
196 return _info && _object;
197 }
198
199 const IdInfo* _info{nullptr};
200
201 ScriptObject* _object{nullptr};
202 };
203
207 void eatWhite();
208
212 void getNumber(Value& d);
213
217 bool getName(std::string& name);
218
222 bool getParameter(Value& result);
223
227 bool arith(Value& result, DataCode& left);
228
232 bool partial(Value& result);
233
238 bool operator_(Value& result, DataCode& left);
239
243 pos_type _pos{0};
247 const char* _cmd{};
251 EArithError _errorValue{aeSuccess};
255 std::string _errorReason;
259 static IdInfo _idInfo[];
260};
261
268_MISC_FUNC Value calculator(const std::string& script, const Value& def);
269
276_MISC_FUNC Value::flt_type calculator(const std::string& script, Value::flt_type def);
277
289
290}// namespace sf
Simple script engine able.
Definition ScriptEngine.h:13
virtual strings getInfoNames() const
Gets names of info structures in lines.
bool setError(EArithError error_value, const std::string &reason=std::string())
Sets the error value for this instance.
const char * getErrorText(EArithError error_value=EArithError::aeCurrent) const
bool getSetValue(const IdInfo *info, Value *value, Value::vector_type *params, bool flag_set) override
Gets and sets a value using a returned Info structure.
bool isAlpha(char ch)
Determines if the passed character is an alpha one.
virtual strings getIdentifiers(EIdentifier id) const
Gets a list of available identifiers.
EArithError getError() const
Gets the error value of this instance.
Definition ScriptEngine.h:106
EArithError
Errors when compiling a script.
Definition ScriptEngine.h:24
@ aeNotObject
Definition ScriptEngine.h:92
@ aeUnexpectedEnd
Definition ScriptEngine.h:33
@ aeExpectedRightParenthesis
Definition ScriptEngine.h:40
@ aeScriptTimeout
Definition ScriptEngine.h:86
@ aeExpectedIdentifier
Definition ScriptEngine.h:48
@ aeExpectedDelimiter
Definition ScriptEngine.h:44
@ aeMaxIdentifierLength
Definition ScriptEngine.h:66
@ aeNotLValue
Definition ScriptEngine.h:90
@ aeUnknownObjectMember
Definition ScriptEngine.h:61
@ aeLabelNotFound
Definition ScriptEngine.h:80
@ aeExpectedLeftParenthesis
Definition ScriptEngine.h:42
@ aeExpectedFunction
Definition ScriptEngine.h:46
@ aeIpStack
Definition ScriptEngine.h:82
@ aeTooManyParameters
Definition ScriptEngine.h:69
@ aeUnknownConstant
Definition ScriptEngine.h:53
@ aeUnknownSymbol
Definition ScriptEngine.h:57
@ aeTooFewParameters
Definition ScriptEngine.h:71
@ aeAssignConstant
Definition ScriptEngine.h:64
@ aeUnknownVariable
Definition ScriptEngine.h:55
@ aeDivisionByZero
Definition ScriptEngine.h:78
@ aeFunctionError
Definition ScriptEngine.h:88
@ aeStringTooLong
Definition ScriptEngine.h:30
@ aeUnknownFunction
Definition ScriptEngine.h:51
@ aeMultipleDeclaration
Definition ScriptEngine.h:74
@ aeUnexpectedIdentifier
Definition ScriptEngine.h:37
@ aeUnknownIdentifier
Definition ScriptEngine.h:59
@ aeUnexpectedKeyword
Definition ScriptEngine.h:76
@ aeExternalKeyword
Definition ScriptEngine.h:84
@ aeUnexpectedCharacter
Definition ScriptEngine.h:35
std::string getErrorReason() const
Gets the associated error reason string.
const IdInfo * getInfo(const std::string &name) const override
Functions to be overloaded in derived classes to add functions, parameters, constants and keywords.
pos_type getPos() const
Gets the current position.
Definition ScriptEngine.h:131
ScriptEngine()
Default constructor.
bool calculate(const std::string &script, Value &result)
Calculates the passed script.
Info structure for objects used in scripts.
Definition ScriptObject.h:14
EIdentifier
Keyword identifiers.
Definition ScriptObject.h:41
std::string::size_type pos_type
Source position type.
Definition ScriptObject.h:32
Counted vector of strings.
Definition TStrings.h:12
Counted vector having additional methods and operators for ease of usage.
Definition TVector.h:25
Value container class able to performing arithmetic functions.
Definition Value.h:19
double flt_type
Type used internally for storing floating point value.
Definition Value.h:28
#define _MISC_FUNC
Definition misc/global.h:39
#define _MISC_CLASS
Definition misc/global.h:40
Definition Application.h:10
_MISC_FUNC Value calculator(const std::string &script, const Value &def)
Calculator function that converts a formula of the passed string to a #sf::Value.
Used to create static lookup lists.
Definition ScriptObject.h:60