🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
ScriptAPI.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstScript/ScriptParser.hpp"
25#include "AstScript/ExprVisitor.hpp"
26#include "AstUtil/StringView.hpp"
27
28AST_NAMESPACE_BEGIN
29
30
36#define AST_EXPR(CLASS) \
37 AST_OBJECT(CLASS)\
38 void accept(ExprVisitor& visitor) override{visitor.visit(*this);};
39
78
100
101
109
110 // 下面的枚举为软件内部使用,不要直接调用
112};
113
114class Expr;
115class Value;
116class Variable;
117class Macro;
118class Function;
119class Symbol;
120
121
128AST_SCRIPT_API Variable* aNewVariable(StringView name, Expr* expr=nullptr, bool bind = false);
129AST_SCRIPT_API Variable* aNewVariable(Expr* expr=nullptr, bool bind = false);
130
135AST_SCRIPT_API Symbol* aNewSymbol(StringView name);
136
143AST_SCRIPT_CAPI Expr* aNewOpAssign(EOpAssignType op, Expr* left, Expr* right);
144
145
152AST_SCRIPT_CAPI Expr* aNewOpBin(EOpBinType op, Expr* left, Expr* right);
153
159AST_SCRIPT_CAPI Expr* aNewOpUnary(EOpUnaryType op, Expr* expr);
160
167AST_SCRIPT_CAPI Expr* aNewExprCondition(Expr* condition, Expr* thenExpr, Expr* elseExpr=nullptr);
168
169
176AST_SCRIPT_CAPI Expr* aNewExprRange(Expr* start, Expr* stop, Expr* step=nullptr);
177
178
181AST_SCRIPT_CAPI Value* aNewValueString(StringView value);
182
185AST_SCRIPT_CAPI Value* aNewValueInt(int value);
186
189AST_SCRIPT_CAPI Value* aNewValueBool(bool value);
190
193AST_SCRIPT_CAPI Value* aNewValueDouble(double value);
194
195class Quantity;
196
197
200AST_SCRIPT_CAPI Value* aNewValueQuantity(const Quantity& value);
201
203AST_SCRIPT_CAPI Value* aValueNull();
204
208AST_SCRIPT_CAPI Expr* aParseExpr(StringView script);
209
210
215AST_SCRIPT_CAPI Value* aEval(StringView script);
216
221AST_SCRIPT_CAPI Value* aEvalExpr(Expr* expr);
222
223
227AST_SCRIPT_CAPI bool aValueIsBool(Value* value);
228
232AST_SCRIPT_CAPI bool aValueIsDouble(Value* value);
233
237AST_SCRIPT_CAPI bool aValueIsInt(Value* value);
238
239
243AST_SCRIPT_CAPI bool aValueIsArithmetic(Value* value);
244
245
249AST_SCRIPT_CAPI bool aValueIsQuantity(Value* value);
250
251
255AST_SCRIPT_CAPI double aValueToDouble(Value* value);
256
260AST_SCRIPT_CAPI bool aValueUnboxBool(Value* value);
261
262
266AST_SCRIPT_CAPI double aValueUnboxDouble(Value* value);
267
268
272AST_SCRIPT_CAPI int aValueUnboxInt(Value* value);
273
274
278AST_SCRIPT_API Quantity aValueUnboxQuantity(Value* value);
279
280
283AST_SCRIPT_API std::string aFormatExpr(Expr* expr, Object* context=nullptr);
284
285
287typedef Value* (*OpBinFunc)(Value* left, Value* right);
288
290typedef Value* (*OpAssignFunc)(Expr* left, Expr* right); // right 采用表达式对象,因为需要支持延迟赋值和绑定赋值
291
293typedef Value* (*OpUnaryFunc)(Value* value);
294
295
296enum {eIterBegin=0};
297
299typedef Value* (*IterateFunc)(Value* value, int& index);
300
301
302// @brief 获取二进制运算函数指针
303// @param op 运算类型
304// @param leftType 左运算数类型
305// @param rightType 右运算数类型
306// @return 运算函数指针
307AST_SCRIPT_CAPI OpBinFunc aGetOpBinFunc(EOpBinType op, Class* leftType, Class* rightType);
308
309
310// @brief 获取赋值运算函数指针
311// @param op 运算类型
312// @param leftType 左运算数类型
313// @param rightType 右运算数类型
314// @return 运算函数指针
315AST_SCRIPT_CAPI OpAssignFunc aGetOpAssignFunc(EOpAssignType op, Class* leftType, Class* rightType);
316
317
319// @param op 运算类型
320// @param type 运算数类型
321// @return 运算函数指针
322AST_SCRIPT_CAPI OpUnaryFunc aGetOpUnaryFunc(EOpUnaryType op, Class* type);
323
324
326// @param type 迭代对象类型
327// @return 迭代函数指针
328AST_SCRIPT_CAPI IterateFunc aGetIterateFunc(Class* type);
329
330
337AST_SCRIPT_CAPI Value* aDoOpBin(EOpBinType op, Value* left, Value* right);
338
344AST_SCRIPT_CAPI Value* aDoOpUnary(EOpUnaryType op, Value* value);
345
346
353AST_SCRIPT_CAPI Value* aDoOpAssign(EOpAssignType op, Expr* left, Expr* right);
354
355
361AST_SCRIPT_CAPI Value* aIterateBegin(Value* container, int& index);
362
368AST_SCRIPT_CAPI Value* aIterateNext(Value* container, int& index);
369
370
371// ALIAS
372
373A_ALWAYS_INLINE Value* aNewValue(int value)
374{
375 return aNewValueInt(value);
376}
377
378A_ALWAYS_INLINE Value* aNewValue(double value)
379{
380 return aNewValueDouble(value);
381}
382
383A_ALWAYS_INLINE Value* aNewValue(bool value)
384{
385 return aNewValueBool(value);
386}
387
388A_ALWAYS_INLINE Value* aNewValue(const Quantity& value)
389{
390 return aNewValueQuantity(value);
391}
392
393A_ALWAYS_INLINE Value* aNewValue(StringView value)
394{
395 return aNewValueString(value);
396}
397
401AST_NAMESPACE_END
类元信息
定义 Class.hpp:37
表达式基类
定义 Expr.hpp:39
值对象基类
定义 Value.hpp:36
EOpAssignType
定义 ScriptAPI.hpp:79
Value * aNewValueBool(bool value)
创建布尔值对象
定义 ScriptAPI.cpp:92
Value * aDoOpAssign(EOpAssignType op, Expr *left, Expr *right)
执行赋值运算符
定义 ScriptAPI.cpp:282
Value *(* OpBinFunc)(Value *left, Value *right)
二元运算函数指针类型
定义 ScriptAPI.hpp:287
Value * aNewValueInt(int value)
创建整数值对象
定义 ScriptAPI.cpp:88
Value *(* OpAssignFunc)(Expr *left, Expr *right)
赋值运算函数指针类型
定义 ScriptAPI.hpp:290
EOpUnaryType
定义 ScriptAPI.hpp:102
EOpBinType
定义 ScriptAPI.hpp:40
Value * aIterateBegin(Value *container, int &index)
执行迭代器的开始元素
定义 ScriptAPI.cpp:353
Value * aIterateNext(Value *container, int &index)
执行迭代器的下一个元素
定义 ScriptAPI.cpp:358
Value * aDoOpUnary(EOpUnaryType op, Value *value)
执行一元运算符
定义 ScriptAPI.cpp:231
Value * aNewValueQuantity(const Quantity &value)
创建数量值对象
定义 ScriptAPI.cpp:101
Value * aNewValueString(StringView value)
创建字符串值对象
定义 ScriptAPI.cpp:84
Value * aDoOpBin(EOpBinType op, Value *left, Value *right)
执行二元运算符
定义 ScriptAPI.cpp:348
Value *(* IterateFunc)(Value *value, int &index)
迭代函数指针类型
定义 ScriptAPI.hpp:299
Value *(* OpUnaryFunc)(Value *value)
一元运算函数指针类型
定义 ScriptAPI.hpp:293
OpUnaryFunc aGetOpUnaryFunc(EOpUnaryType op, Class *type)
获取一元运算函数指针
定义 ScriptAPI.cpp:337
IterateFunc aGetIterateFunc(Class *type)
获取迭代函数指针
定义 ScriptAPI.cpp:342
@ eElemMulAssign
按元素乘赋值
定义 ScriptAPI.hpp:91
@ eAssign
赋值 =
定义 ScriptAPI.hpp:80
@ eDivAssign
除法赋值
定义 ScriptAPI.hpp:87
@ eDelayAssign
延迟赋值 :=
定义 ScriptAPI.hpp:81
@ eElemOrAssign
按元素或赋值
定义 ScriptAPI.hpp:96
@ eAddAssign
加法赋值
定义 ScriptAPI.hpp:84
@ eMulAssign
乘法赋值
定义 ScriptAPI.hpp:86
@ eElemDivAssign
按元素除赋值
定义 ScriptAPI.hpp:92
@ ePowAssign
乘方赋值
定义 ScriptAPI.hpp:89
@ eElemAndAssign
按元素与赋值
定义 ScriptAPI.hpp:95
@ numOpAssignType
运算符类型数量
定义 ScriptAPI.hpp:98
@ eElemModAssign
按元素取模赋值
定义 ScriptAPI.hpp:93
@ eSubAssign
减法赋值
定义 ScriptAPI.hpp:85
@ eElemPowAssign
按元素乘方赋值
定义 ScriptAPI.hpp:94
@ eBindAssign
绑定赋值 =&
定义 ScriptAPI.hpp:82
@ eModAssign
取模赋值
定义 ScriptAPI.hpp:88
@ eNeg
负号
定义 ScriptAPI.hpp:104
@ eDec
自减
定义 ScriptAPI.hpp:106
@ eInc
自增
定义 ScriptAPI.hpp:105
@ eNot
逻辑非
定义 ScriptAPI.hpp:103
@ eIterate
迭代器
定义 ScriptAPI.hpp:111
@ eBitNot
按位取反
定义 ScriptAPI.hpp:107
@ numOpUnaryType
运算符类型数量
定义 ScriptAPI.hpp:108
@ eNe
不等于
定义 ScriptAPI.hpp:69
@ eElemPow
按元素乘方
定义 ScriptAPI.hpp:59
@ eElemOr
按元素或
定义 ScriptAPI.hpp:62
@ eGt
大于
定义 ScriptAPI.hpp:67
@ invalidOpBin
无效运算符
定义 ScriptAPI.hpp:72
@ eMul
乘法
定义 ScriptAPI.hpp:43
@ eBitAnd
位与
定义 ScriptAPI.hpp:51
@ eCatHorizontal
水平拼接
定义 ScriptAPI.hpp:76
@ eElemMul
按元素乘
定义 ScriptAPI.hpp:57
@ eLt
小于
定义 ScriptAPI.hpp:64
@ eElemAnd
按元素与
定义 ScriptAPI.hpp:61
@ eBitRightShift
定义 ScriptAPI.hpp:54
@ eBitLeftShift
<< (逻辑/算术左移)
定义 ScriptAPI.hpp:53
@ eAnd
逻辑与
定义 ScriptAPI.hpp:48
@ eBitURightShift
定义 ScriptAPI.hpp:55
@ eGe
大于等于
定义 ScriptAPI.hpp:68
@ eElemDiv
按元素除
定义 ScriptAPI.hpp:58
@ eLe
小于等于
定义 ScriptAPI.hpp:65
@ eCatVertical
垂直拼接
定义 ScriptAPI.hpp:75
@ eBitXor
位异或
定义 ScriptAPI.hpp:52
@ eMod
取模
定义 ScriptAPI.hpp:46
@ eDiv
除法
定义 ScriptAPI.hpp:44
@ ePow
乘方
定义 ScriptAPI.hpp:45
@ eSub
减法
定义 ScriptAPI.hpp:42
@ eBitOr
位或
定义 ScriptAPI.hpp:50
@ eElemMod
按元素取模
定义 ScriptAPI.hpp:60
@ eAdd
加法
定义 ScriptAPI.hpp:41
@ numOpBinType
运算符类型数量
定义 ScriptAPI.hpp:71
@ eEq
等于
定义 ScriptAPI.hpp:66
@ eOr
逻辑或
定义 ScriptAPI.hpp:49