Token *Parser::reduceR21(TokenStack &stack) { if (stack.size() < 6) return 0; Token *optArgList = stack.takeLastToken(); delete stack.takeLastToken(); Token *funcName = stack.takeLastToken(); delete stack.takeLastToken(); Token *specFuncName = stack.takeLastToken(); delete stack.takeLastToken(); Token *func = new Token(Token::Function_Token); Function_TokenData *data = DATA_CAST(Function, func); data->setName(DATA_CAST(String, specFuncName)->value()); delete specFuncName; Token *subprogram = new Token(Token::Subprogram_Token); Token *statement = new Token(Token::Statement_Token); DATA_CAST(Statement, statement)->setString(DATA_CAST(String, funcName)->value()); delete funcName; DATA_CAST(Subprogram, subprogram)->prependStatement(DATA_CAST(Statement, statement)); delete statement; Token *obligArgList = new Token(Token::ObligArgList_Token); DATA_CAST(ArgList, obligArgList)->prependArgument(DATA_CAST(Subprogram, subprogram)); delete subprogram; data->setObligatoryArguments(DATA_CAST(ArgList, obligArgList)); delete obligArgList; data->setOptionalArguments(DATA_CAST(ArgList, optArgList)); delete optArgList; return func; }
Token *Parser::reduceR14(TokenStack &stack) { if (stack.size() < 1) return 0; Token *f = stack.takeLastToken(); Token *s = new Token(Token::Statement_Token); DATA_CAST(Statement, s)->setFunction(DATA_CAST(Function, f)); delete f; return s; }
Token *Parser::reduceR13(TokenStack &stack) { if (stack.size() < 2) return 0; Token *p = stack.takeLastToken(); Token *s = stack.takeLastToken(); DATA_CAST(Subprogram, p)->prependStatement(DATA_CAST(Statement, s)); delete s; return p; }
Token *Parser::reduceR9(TokenStack &stack) { if (stack.size() < 2) return 0; Token *argList = stack.takeLastToken(); Token *arg = stack.takeLastToken(); DATA_CAST(ArgList, argList)->prependArgument(DATA_CAST(Subprogram, arg)); delete arg; return argList; }
Token *Parser::reduceR8(TokenStack &stack) { if (stack.size() < 1) return 0; Token *arg = stack.takeLastToken(); Token *argList = new Token(Token::OptArgListNE_Token); DATA_CAST(ArgList, argList)->appendArgument(DATA_CAST(Subprogram, arg)); delete arg; return argList; }
Token *Parser::reduceR7(TokenStack &stack) { if (stack.size() < 1) return 0; Token *argListNE = stack.takeLastToken(); Token *argList = new Token(Token::OptArgList_Token); DATA_CAST(ArgList, argList)->copyArguments(DATA_CAST(ArgList, argListNE)); delete argListNE; return argList; }
Token *Parser::reduceR15(TokenStack &stack) { if (stack.size() < 1) return 0; Token *an = stack.takeLastToken(); Token *s = new Token(Token::Statement_Token); DATA_CAST(Statement, s)->setArgumentNo(DATA_CAST(ArgumentNo, an)); delete an; return s; }
Token *Parser::reduceR16(TokenStack &stack) { if (stack.size() < 1) return 0; Token *string = stack.takeLastToken(); Token *s = new Token(Token::Statement_Token); DATA_CAST(Statement, s)->setString(DATA_CAST(String, string)->value()); delete string; return s; }
Token *Parser::reduceR1(TokenStack &stack) { if (stack.size() < 2) return 0; Token *program = stack.takeLastToken(); Token *func = stack.takeLastToken(); DATA_CAST(Program, program)->prependFunction(DATA_CAST(Function, func)); delete func; return program; }
Token *Parser::reduceR18(TokenStack &stack) { if (stack.size() < 1) return 0; Token *real = stack.takeLastToken(); Token *s = new Token(Token::Statement_Token); DATA_CAST(Statement, s)->setReal(DATA_CAST(Real, real)->value()); delete real; return s; }
Token *Parser::reduceR17(TokenStack &stack) { if (stack.size() < 1) return 0; Token *integer = stack.takeLastToken(); Token *s = new Token(Token::Statement_Token); DATA_CAST(Statement, s)->setInteger(DATA_CAST(Integer, integer)->value()); delete integer; return s; }
Token *Parser::reduceR20(TokenStack &stack) { if (stack.size() < 2) return 0; Token *f = stack.takeLastToken(); delete stack.takeLastToken(); Token *an = new Token(Token::ArgumentNo_Token); DATA_CAST(ArgumentNo, an)->setFunction(DATA_CAST(Function, f)); delete f; return an; }
Token *Parser::reduceR19(TokenStack &stack) { if (stack.size() < 2) return 0; Token *integer = stack.takeLastToken(); delete stack.takeLastToken(); Token *an = new Token(Token::ArgumentNo_Token); DATA_CAST(ArgumentNo, an)->setInteger(DATA_CAST(Integer, integer)->value()); delete integer; return an; }
Token *Parser::reduceR11(TokenStack &stack) { if (stack.size() < 3) return 0; delete stack.takeLastToken(); Token *p = stack.takeLastToken(); delete stack.takeLastToken(); Token *arg = new Token(Token::OptArg_Token); DATA_CAST(Subprogram, arg)->copyStatements(DATA_CAST(Subprogram, p)); delete p; return arg; }
Token *Parser::reduceR2(TokenStack &stack) { if (stack.size() < 4) return 0; Token *optArgList = stack.takeLastToken(); Token *obligArgList = stack.takeLastToken(); Token *funcName = stack.takeLastToken(); delete stack.takeLastToken(); Token *func = new Token(Token::Function_Token); Function_TokenData *data = DATA_CAST(Function, func); data->setName(DATA_CAST(String, funcName)->value()); delete funcName; data->setObligatoryArguments(DATA_CAST(ArgList, obligArgList)); delete obligArgList; data->setOptionalArguments(DATA_CAST(ArgList, optArgList)); delete optArgList; return func; }
bool PretexFunction::execute(ExecutionContext *context, Function_TokenData *f, QString *err) { if (!isValid()) return bRet(err, tr("Attempted to execute invalid function", "error"), false); int oblArgCount = obligatoryArgumentCount(); if (f->obligatoryArgumentCount() != oblArgCount) return bRet(err, tr("Argument count mismatch:", "error") + " " + name(), false); int optArgCount = optionalArgumentCount(); if (optArgCount >= 0 && f->optionalArgumentCount() > optArgCount) return bRet(err, tr("Argument count mismatch:", "error") + " " + name(), false); QList<PretexVariant> oblArgs; foreach (int i, bRangeD(0, f->obligatoryArgumentCount() - 1)) { bool b = false; PretexVariant a = ExecutionModule::executeSubprogram(context, f->obligatoryArgument(i), "", &b, err); if (!b) return false; oblArgs << a; } QList<PretexVariant> optArgs; foreach (int i, bRangeD(0, f->optionalArgumentCount() - 1)) { bool b = false; PretexVariant a = ExecutionModule::executeSubprogram(context, f->optionalArgument(i), "", &b, err); if (!b) return false; optArgs << a; } ExecutionContext s(oblArgs, optArgs, name(), context); bool b = false; PretexVariant v = ExecutionModule::executeSubprogram(&s, DATA_CAST(Subprogram, &mbody), f->name(), &b, err); if (!b) return false; context->setReturnValue(v); return bRet(err, QString(), true); }
void init_global_data(void) { /* Vehicle information */ set_global_data_value(VEHICLE_TYPE, UINT8, DATA_CAST((uint8_t)QUADCOPTER)); /* Flight status */ set_global_data_value(SAFTY_BUTTON, UINT8, DATA_CAST((uint8_t)QUADCOPTER)); set_global_data_value(MODE_BUTTON, UINT8, DATA_CAST((uint8_t)QUADCOPTER)); /* Attitude PID Gain */ set_global_data_value(ROLL_KP, FLOAT, DATA_CAST((float)0.20f)); set_global_data_value(ROLL_KI, FLOAT, DATA_CAST((float)0.045f)); set_global_data_value(ROLL_KD, FLOAT, DATA_CAST((float)0.07f)); set_global_data_value(PITCH_KP, FLOAT, DATA_CAST((float)0.20f)); set_global_data_value(PITCH_KI, FLOAT, DATA_CAST((float)0.045)); set_global_data_value(PITCH_KD, FLOAT, DATA_CAST((float)0.07f)); set_global_data_value(YAW_KP, FLOAT, DATA_CAST((float)0.65)); set_global_data_value(YAW_KI, FLOAT, DATA_CAST((float)0)); set_global_data_value(YAW_KD, FLOAT, DATA_CAST((float)0)); set_global_data_value(YAW_KP, FLOAT, DATA_CAST((float)0.65)); set_global_data_value(YAW_KI, FLOAT, DATA_CAST((float)0)); set_global_data_value(YAW_KD, FLOAT, DATA_CAST((float)0)); set_global_data_value(HEADING_KP, FLOAT, DATA_CAST((float)2.5)); set_global_data_value(HEADING_KI, FLOAT, DATA_CAST((float)0)); set_global_data_value(HEADING_KD, FLOAT, DATA_CAST((float)0)); set_global_data_value(ZD_KP, FLOAT, DATA_CAST((float)0.3)); set_global_data_value(ZD_KI, FLOAT, DATA_CAST((float)0.03)); set_global_data_value(ZD_KD, FLOAT, DATA_CAST((float)0)); set_global_data_value(Z_KP, FLOAT, DATA_CAST((float)1.4)); set_global_data_value(Z_KI, FLOAT, DATA_CAST((float)0)); set_global_data_value(Z_KD, FLOAT, DATA_CAST((float)0)); int i; for(i = 0; i < get_global_data_count(); i++) { bool parameter_config; get_global_data_parameter_config_status(i, ¶meter_config); if(parameter_config == true) modifiable_data_cnt++; } }
bool PretexFunction::isEmpty() const { return !isValid() || !DATA_CAST(Subprogram, &mbody)->statementCount(); }