sagexx_ug (1158317), страница 5
Текст из файла (страница 5)
var.isPerfectLoopNest();getNextLoop();getPreviousLoop();// returns outer nested loopgetInnermostLoop(); // returns innermost nested loopChapter 3: Statements#if 0int43isLinearLoopNest();// TRUE if the bound and step of the loop// in the loop nest are linear expressions// and use the index variables of the previous// loops of the nest.#endifintisEnddoLoop();// TRUE if the loop ends with an EnddointconvertLoop();// Convert the loop into a Good loop.#if 0intisAssignLoop();// TRUE if the body consists only of assignmeintisAssignIfLoop();// TRUE if the body consists only of assigmen//and conditional statements.//high level program transformations.// Most are from SIGMA Toolbox by F.Bodin et al.// Semantics can be found in the above reference.inttiling_p(int i);inttiling(int i, int tab[]);intstripMining(int i);SgStatementdistributeLoop(int i);SgStatementdistributeLoopSCC();SgStatementloopFusion(SgForStmt &loop);SgStatementunrollLoop(int i);intinterchangeLoops(SgForStmt &loop);intinterchangeWithLoop(int i);intnormalized();intNormalizeLoop();intvectorize();intvectorizeNest();intExpandScalar(SgSymbol &symbol, int i);intScalarForwardSubstitution(SgSymbol &symbol);intpullStatementToFront(SgStatement &s);intpullStatementToEnd(SgStatement &s);#endif};SgForStmt is used in the following places in the example programs: see [Restructure - addStuToProgram], page 135see [Instrument - FixLoops], page 143see [Dump Info - doLoopStmts], page 177Member Functions:SgForStmt(SgSymbol &do var, SgExpression &start, SgExpression &end, SgExpression &step,SgStatement &body)Chapter 3: StatementsSgForStmt(SgSymbol *do var,44SgExpression *start, SgExpression *end, SgExpression *step,SgStatement *body)SgForStmt(SgSymbol &do var, SgExpression &start, SgExpression &end, SgStatement &body)SgForStmt(SgExpression &start, SgExpression &end, SgExpression &step, SgStatement &body)SgSymbol doName()void setDoName(SgSymbol &doName)SgExpression * start()void setStart(SgExpression &lbound)SgExpression * end()void setEnd(SgExpression &ubound)SgExpression * step()void setStep(SgExpression &step)SgLabel * endOfLoop()//SgExpression & bounds()//void setBounds(SgTripletOp &bounds)SgStatement * body()void set body(SgStatement &s)int replaceBody(SgStatement &s)int numberOfInductVars()SgSymbol * inductionVar(int i)SgExpression * indVarRange(int i)int isPerfectLoopNest()SgStatement * getNextLoop()SgStatement * getPreviousLoop()SgStatement * getInnermostLoop()int isLinearLoopNest()int isEnddoLoop()Chapter 3: Statements45int convertLoop()int isAssignLoop()int isAssignIfLoop()int tiling p(int i)int tiling(int i, int tab[])int stripMining(int i)SgStatement distributeLoop(int i)SgStatement distributeLoopSCC()SgStatement loopFusion(SgForStmt &loop)SgStatement unrollLoop(int i)int interchangeLoops(SgForStmt &loop)int interchangeWithLoop(int i)int normalized()int NormalizeLoop()int vectorize()int vectorizeNest()int ExpandScalar(SgSymbol &symbol, int i)int ScalarForwardSubstitution(SgSymbol &symbol)int pullStatementToFront(SgStatement &s)int pullStatementToEnd(SgStatement &s)SgDoWhileStmtRepresents C do...while.Represents Fortran dowhile.For base class, see [SgWhileStmt], page 46.Chapter 3: Statements46class SgDoWhileStmt: public SgWhileStmt {// For Fortran dowhile()..
and C do {....) while();// variant = DO_WHILE_NODEpublic:SgDoWhileStmt(SgExpression &cond, SgStatement &body);};Member Functions:// For Fortran dowhile()SgDoWhileStmt(SgExpression &cond, SgStatement &body)SgWhileStmtRepresents C while() .For base class, see Section 3.1 [SgStatement], page 11.class SgWhileStmt: public SgStatement {// for Cwhile()// variant = WHILE_NODEpublic:SgWhileStmt(int variant);SgWhileStmt(SgExpression &cond, SgStatement &body);SgExpression * conditional();// the while test#if 0intnumberOfInductVars(); // 1 if an induction variable can be found.SgSymbol *inductionVar(int i);// i-th induction variableSgExpression * indVarRange(int i); // range of i-th ind. var.#endifvoidreplaceBody(SgStatement &s); // new body = s and lex successors.};SgWhileStmt is used in the following places in the example programs: see [Restructure - addStuToProgram], page 135 see [Dump Info - doLoopStmts], page 177Member Functions:Chapter 3: Statements47// for C while()SgWhileStmt(int variant)SgWhileStmt(SgExpression &cond, SgStatement &body)SgExpression * conditional()int numberOfInductVars()SgSymbol * inductionVar(int i)SgExpression * indVarRange(int i)void replaceBody(SgStatement &s)SgIfStmtRepresents C if.Represents Fortran if...then...else.For base class, see Section 3.1 [SgStatement], page 11.class SgIfStmt: public SgStatement {// For Fortran if then else and C if()// variant == IF_NODEpublic:SgIfStmt(int variant);SgIfStmt(SgExpression &cond,SgStatement &trueBody,SgStatement &falseBody,SgSymbol &construct_name);SgIfStmt(SgExpression &cond,SgStatement &trueBody,SgStatement &falseBody);SgIfStmt(SgExpression &cond,SgStatement &trueBody);SgStatement *trueBody();// the first stmt in the True cla// SgBlock is needed?SgStatement *trueBody(int i); // i-th stmt in True clauseSgStatement *falseBody();// the first stmt in the FalseSgStatement *falseBody(int i);// i-th statement of the body.SgExpression *conditional(); // the while testSgSymbol *construct_name();voidreplaceTrueBody(SgStatement &s);// new body=s andvoidreplaceFalseBody(SgStatement &s);//new body=s andChapter 3: Statements48};SgIfStmt is used in the following places in the example programs: see [Restructure - addStuToProgram], page 135 see [Dump Info - doIfStmts], page 176Member Functions:// For Fortran if then else and C if()SgIfStmt(int variant)SgIfStmt(SgExpression &cond, SgStatement &trueBody,&construct name)SgStatement &falseBody, SgSymbolSgIfStmt(SgExpression &cond, SgStatement &trueBody, SgStatement &falseBody)SgIfStmt(SgExpression &cond, SgStatement &trueBody)SgStatement * trueBody()SgStatement * trueBody(int i)SgStatement * falseBody()SgStatement * falseBody(int i)SgExpression * conditional()SgSymbol * construct name()void replaceTrueBody(SgStatement &s)void replaceFalseBody(SgStatement &s)SgSwitchStmtRepresents C switch.Represents Fortran case.For base class, see Section 3.1 [SgStatement], page 11.Chapter 3: Statements49class SgSwitchStmt: public SgStatement {// Fortran Case and C switch();// variant == SWITCH_NODEpublic:SgSwitchStmt(SgExpression &selector,SgStatement &caseOptionList,SgSymbol &constructName);SgExpression *selector(); // the switch selectorvoidsetSelector(SgExpression &cond);intnumberOfCaseOptions();// the number of casesSgStatement *caseOption(int i); // i-th case blockvoidaddCaseOption(SgStatement &caseOption);#if 0voiddeleteCaseOption(int i);#endif};Member Functions:// Fortran Case and C switch()SgSwitchStmt(SgExpression &selector,Name)SgStatement &caseOptionList, SgSymbol &construct-SgExpression * selector()void setSelector(SgExpression &cond)int numberOfCaseOptions()SgStatement * caseOption(int i)void addCaseOption(SgStatement &caseOption)void deleteCaseOption(int i)SgLogIfStmtRepresents Fortran logical if.For base class, see Section 3.1 [SgStatement], page 11.class SgLogIfStmt: public SgStatement {// For Fortran logical if - only one body statement allowed// variant == LOGIF_NODEChapter 3: Statementspublic:50SgLogIfStmt(int variant);SgLogIfStmt(SgExpression &cond, SgStatement &s);SgStatement * body(); // returns reference to first stmt in the bodySgExpression * conditional(); // the while test// check if the statement s is a single statement.voidsetBody(SgStatement &s); // new body = s// this code won't work, since after the addition false//clause, it should become SgIfThenElse statement.voidaddFalseClause(SgStatement &s); // make it into if-then-elseSgIfStmt *convertLogicIf();};SgLogIfStmt is used in the following places in the example programs: see [Dump Info - doIfStmts], page 176Member Functions:SgLogIfStmt(int variant)SgLogIfStmt(SgExpression &cond, SgStatement &s)SgStatement * body()SgExpression * conditional()void setBody(SgStatement &s)void addFalseClause(SgStatement &s)SgIfStmt * convertLogicIf()SgIfElseIfStmtRepresents Fortran if...then...elseif...elseif.For base class, see [SgIfStmt], page 47.class SgIfElseIfStmt: public SgIfStmt {#if 0// For Fortran if then elseif ..
elseif ... case// variant == ELSEIF_NODEChapter 3: Statements51public:SgIfElseIfStmt(SgExpression &condList, SgStatement &blockList,SgSymbol &constructName);intnumberOfConditionals();// the number of conditionalsSgStatement * body(int b);// block bvoidsetBody(int b);// sets blockSgExpression * conditional(int i); // the i-th conditionalvoidsetConditional(int i);// sets the i-th conditionalvoidaddClause(SgExpression &cond, SgStatement &block);voidremoveClause(int b);// removes block b and it's conditional};Member Functions:SgIfElseIfStmt(SgExpression &condList, SgStatement &blockList, SgSymbol &constructName)int numberOfConditionals()SgStatement * body(int b)void setBody(int b)SgExpression * conditional(int i)void setConditional(int i)void addClause(SgExpression &cond, SgStatement &block)void removeClause(int b)SgArithIfStmtRepresents Fortran arithmentic if.For base class, see Section 3.1 [SgStatement], page 11.class SgArithIfStmt: public SgStatement {// For Fortran Arithementic if// variant == ARITHIF_NODEChapter 3: Statementspublic:52SgArithIfStmt(int variant);SgArithIfStmt(SgExpression &cond, SgLabel &llabel,SgLabel &elabel, SgLabel &glabel);SgExpression * conditional();voidset_conditional(SgExpression &cond);SgExpression * label(int i); // the <, ==, and > goto labels.
in order 0->2.voidsetLabel(SgLabel &label);};SgArithIfStmt is used in the following places in the example programs: see [Dump Info - doIfStmts], page 176Member Functions:SgArithIfStmt(int variant)SgArithIfStmt(SgExpression &cond, SgLabel &llabel, SgLabel &elabel, SgLabel &glabel)SgExpression * conditional()void set conditional(SgExpression &cond)SgExpression * label(int i)void setLabel(SgLabel &label)SgWhereStmtRepresents Fortran where.For base class, see [SgLogIfStmt], page 49.class SgWhereStmt: public SgLogIfStmt {// fortran Where stmt// variant == WHERE_NODEpublic:SgWhereStmt(SgExpression &cond, SgStatement &body);};Member Functions:Chapter 3: Statements53SgWhereStmt(SgExpression &cond, SgStatement &body)SgWhereBlockStmtRepresents Fortran where...elsewhere.For base class, see [SgIfStmt], page 47.class SgWhereBlockStmt: public SgIfStmt {// fortran Where - Elsewhere stmt// variant == WHERE_BLOCK_STMTpublic:SgWhereBlockStmt(SgExpression &cond, SgStatement &trueBody,SgStatement &falseBody);};Member Functions:SgWhereBlockStmt(SgExpression &cond, SgStatement &trueBody, SgStatement &falseBody)SgCaseOptionStmtRepresents case option statement.For base class, see Section 3.1 [SgStatement], page 11.class SgCaseOptionStmt: public SgStatement {// Fortran case option statement// variant == CASE_NODEpublic:SgCaseOptionStmt(SgExpression &caseRangeList,SgStatement &body, SgSymbol &constructName);SgExpression *voidSgExpression *voidSgStatement *voidcaseRangeList();setCaseRangeList(SgExpression &caseRangeList);caseRange(int i);setCaseRange(int i, SgExpression &caseRange);body();setBody(SgStatement &body);Chapter 3: Statements54};Member Functions:SgCaseOptionStmt(SgExpression &caseRangeList, SgStatement &body, SgSymbol &construct-Name)SgExpression * caseRangeList()void setCaseRangeList(SgExpression &caseRangeList)SgExpression * caseRange(int i)void setCaseRange(int i, SgExpression &caseRange)SgStatement * body()void setBody(SgStatement &body)3.5 Executable and Other StatementsSgExecutableStatementFor base class, see Section 3.1 [SgStatement], page 11.class SgExecutableStatement: public SgStatement {// this is really a non-control, non-declaration stmt.// no special functions here.public:SgExecutableStatement(int variant);};Member Functions:SgExecutableStatement(int variant)Chapter 3: StatementsSgContinueStmtRepresents continue, for all languages.For base class, see [SgExecutableStatement], page 54.class SgContinueStmt: public SgExecutableStatement {// variant == CONT_STAT in Fortran and// variant == CONTINUE_NODE in Cpublic:SgContinueStmt();};Member Functions:SgContinueStmt()SgControlEndStmtRepresents ends of basic blocks, for all languages.For base class, see [SgExecutableStatement], page 54.class SgControlEndStmt: public SgExecutableStatement {// the end of a basic block// variant == CONTROL_ENDpublic:SgControlEndStmt(int variant);SgControlEndStmt();};SgControlEndStmt is used in the following places in the example programs: see [Expand Syntax - ReplaceWithGetElemPart], page 163Member Functions:SgControlEndStmt(int variant)55Chapter 3: StatementsSgControlEndStmt()SgReturnStmtRepresents return statements, for all languages.For base class, see [SgExecutableStatement], page 54.class SgReturnStmt: public SgExecutableStatement {// the return (expr) node// variant == RETURN_NODE//RETURN_STATpublic:SgReturnStmt(SgExpression &returnValue);SgReturnStmt();SgExpression * returnValue();voidsetReturnValue(SgExpression &retVal);};SgReturnStmt is used in the following places in the example programs: see [Restructure - addStuToProgram], page 135Member Functions:SgReturnStmt(SgExpression &returnValue)SgReturnStmt()SgExpression * returnValue()void setReturnValue(SgExpression &retVal)SgGotoStmtRepresents goto, for all languages.For base class, see [SgExecutableStatement], page 54.56Chapter 3: Statementsclass SgGotoStmt: public SgExecutableStatement {// the fortran or C goto// variant == GOTO_NODEpublic:SgGotoStmt(SgLabel &label);SgLabel *branchLabel();#if 0SgStatement * target(); //the statement we go to#endif};SgGotoStmt is used in the following places in the example programs: see [Dump Info - doGoToStmt], page 178Member Functions:SgGotoStmt(SgLabel &label)SgLabel * branchLabel()SgStatement * target()SgCExpStmtRepresents C expression statements.For usage, see [SgExpression Usage], page 74.For base class, see [SgExecutableStatement], page 54.class SgCExpStmt: public SgExecutableStatement {// C non-control expression Statment// variant == EXPR_STMT_NODEpublic:SgCExpStmt(SgExpression &exp);SgCExpStmt(SgExpression &lhs, SgExpression &rhs);SgExpression * expr(); // the expressionvoidreplaceExpression(SgExpression &e); // replace exp with e};SgCExpStmt is used in the following places in the example programs:57Chapter 3: Statementssee [Instrument - InsertCCallNode], page 155see [Expand Syntax - ReplaceWithGetElemPart], page 163Member Functions:SgCExpStmt(SgExpression &exp)SgCExpStmt(SgExpression &lhs, SgExpression &rhs)SgExpression * expr()void replaceExpression(SgExpression &e)SgBreakStmtRepresents C break.For base class, see [SgExecutableStatement], page 54.class SgBreakStmt: public SgExecutableStatement {// C break stmt -jkg// variant == BREAK_NODEpublic:SgBreakStmt();};Member Functions:SgBreakStmt()SgAssignStmtRepresents Fortran assignment statements.For base class, see [SgExecutableStatement], page 54.58Chapter 3: Statementsclass SgAssignStmt: public SgExecutableStatement// Fortran assignment Statment// variant == ASSIGN_STATpublic:SgAssignStmt(int variant);SgAssignStmt(SgExpression &lhs,SgExpression * lhs(); // the left hand sideSgExpression * rhs(); // the right hand sidevoidreplaceLhs(SgExpression &e); //voidreplaceRhs(SgExpression &e); //#if 0SgExpression * varReferenced();SgExpression * varUsed();SgExpression * varDefined();#endif};59{SgExpression &rhs);replace lhs with ereplace rhs with eSgAssignStmt is used in the following places in the example programs: see [Restructure - addStuToProgram], page 135 see [Dump Info - classifyStatements], page 170Member Functions:SgAssignStmt(int variant)SgAssignStmt(SgExpression &lhs, SgExpression &rhs)SgExpression * lhs()SgExpression * rhs()void replaceLhs(SgExpression &e)void replaceRhs(SgExpression &e)SgExpression * varReferenced()SgExpression * varUsed()SgExpression * varDened()SgPointerAssignStmtRepresents Fortran pointer assignment statements.Chapter 3: StatementsFor base class, see [SgAssignStmt], page 58.class SgPointerAssignStmt: public SgAssignStmt {// Fortran pointer assignment statement// variant == POINTER_ASSIGN_STATpublic:SgPointerAssignStmt(SgExpression lhs, SgExpression rhs);};Member Functions:SgPointerAssignStmt(SgExpression lhs, SgExpression rhs)SgHeapStmtRepresents Fortran allocate and deallocate.For base class, see [SgExecutableStatement], page 54.class SgHeapStmt: public SgExecutableStatement {// Fortran heap space allocation and deallocation statements// variant == ALLOCATE_STMT or DEALLOCATE_STMTpublic:SgHeapStmt(int variant, SgExpression &allocationList,SgExpression &statVariable);SgExpression * allocationList();voidsetAllocationList(SgExpression &allocationList);SgExpression * statVariable();voidsetStatVariable(SgExpression &statVar);};Member Functions:SgHeapStmt(int variant, SgExpression &allocationList, SgExpression &statVariable)SgExpression * allocationList()void setAllocationList(SgExpression &allocationList)60Chapter 3: StatementsSgExpression * statVariable()void setStatVariable(SgExpression &statVar)SgNullifyStmtRepresents Fortran pointer initialization statement.For base class, see [SgExecutableStatement], page 54.class SgNullifyStmt: public SgExecutableStatement {// Fortran pointer initialization statement// variant == NULLIFY_STMTpublic:SgNullifyStmt(SgExpression &objectList);SgExpression * nullifyList();voidsetNullifyList(SgExpression &nullifyList);};Member Functions:SgNullifyStmt(SgExpression &objectList)SgExpression * nullifyList()void setNullifyList(SgExpression &nullifyList)SgLabelListStmtRepresents Fortran statements containing lists of labels.For base class, see [SgExecutableStatement], page 54.class SgLabelListStmt: public SgExecutableStatement {// the fortran// statements containg a list of labels61Chapter 3: Statementspublic:intSgExpression *void#if 0SgStatement *#endif};62SgLabelListStmt(int variant);numberOfTargets();labelList();setLabelList(SgExpression &labelList);target(int i); //the statement we go toMember Functions:SgLabelListStmt(int variant)int numberOfTargets()SgExpression * labelList()void setLabelList(SgExpression &labelList)SgStatement * target(int i)SgAssignedGotoStmtRepresents Fortran assigned goto statement.For base class, see [SgLabelListStmt], page 61.class SgAssignedGotoStmt: public SgLabelListStmt {// the fortran// variant == ASSGOTO_NODEpublic:SgAssignedGotoStmt(SgSymbol &symbol, SgExpression &labelList);SgSymbol * symbol();voidsetSymbol(SgSymbol &symb);};SgAssignedGotoStmt is used in the following places in the example programs: see [Dump Info - doGoToStmt], page 178Chapter 3: StatementsMember Functions:SgAssignedGotoStmt(SgSymbol &symbol, SgExpression &labelList)SgSymbol * symbol()void setSymbol(SgSymbol &symb)SgComputedGotoStmtRepresents Fortran computed goto statement.For base class, see [SgLabelListStmt], page 61.class SgComputedGotoStmt: public SgLabelListStmt {// the fortran goto// variant == COMGOTO_NODEpublic:SgComputedGotoStmt(SgExpression &expr, SgLabel &label);voidaddLabel(SgLabel &label);SgExpression * exp();voidsetExp(SgExpression &exp);};SgComputedGotoStmt is used in the following places in the example programs: see [Dump Info - doGoToStmt], page 178Member Functions:SgComputedGotoStmt(SgExpression &expr, SgLabel &label)void addLabel(SgLabel &label)SgExpression * exp()void setExp(SgExpression &exp)63Chapter 3: StatementsSgStopOrPauseStmtRepresents Fortran stop statement.For base class, see [SgExecutableStatement], page 54.class SgStopOrPauseStmt: public SgExecutableStatement {// the fortran stop// variant == STOP_STATpublic:SgStopOrPauseStmt(int variant, SgExpression &expr);SgExpression * exp();voidsetExp(SgExpression &exp);};Member Functions:SgStopOrPauseStmt(int variant, SgExpression &expr)SgExpression * exp()void setExp(SgExpression &exp)SgCallStmtRepresents Fortran call statement.For base class, see [SgExecutableStatement], page 54.class SgCallStmt: public SgExecutableStatement {// the fortran call// variant == PROC_STATpublic:SgCallStmt(SgSymbol &name, SgExpression &args);SgCallStmt(SgSymbol &name);SgSymbol *name();// name of subroutine being calledintnumberOfArgs(); // the number of arguement expressionsvoidaddArg(SgExpression &arg);SgExpression * arg(int i); // the i-th argument expression64Chapter 3: Statements#if 0// global analysis functionsintnumberOfVarsUsed();SgExpression * varsUsed(int i); // i-th region descriptionintnumberOfVarsMod();SgExpression * varsMod(int i); // i-th region description#endif};SgCallStmt is used in the following places in the example programs: see [Restructure - addStuToProgram], page 135 see [Instrument - InsertFCallNode], page 142 see [Dump Info - classifyStatements], page 170Member Functions:SgCallStmt(SgSymbol &name, SgExpression &args)SgCallStmt(SgSymbol &name)SgSymbol * name()int numberOfArgs()void addArg(SgExpression &arg)SgExpression * arg(int i)int numberOfVarsUsed()SgExpression * varsUsed(int i)int numberOfVarsMod()SgExpression * varsMod(int i)SgIOStmtFor base class, see [SgExecutableStatement], page 54.65Chapter 3: Statementsclass SgIOStmt: public SgExecutableStatement {// fortran input/output and their control statements// abstract classpublic:SgIOStmt(int variant);};SgIOStmt is used in the following places in the example programs: see [Dump Info - doIOStmts], page 178Member Functions:SgIOStmt(int variant)SgInputOutputStmtRepresents Fortran read, write, and print.For base class, see [SgIOStmt], page 65.class SgInputOutputStmt: public SgIOStmt {// fortran input and output statements// variant = READ_STAT, WRITE_STATE, PRINT_STATpublic:SgInputOutputStmt(int variant, SgExpression &specList,SgExpression &itemList);SgExpression * specList();voidsetSpecList(SgExpression &specList);SgExpression * itemList();voidsetItemList(SgExpression &itemList);};SgInputOutputStmt is used in the following places in the example programs: see [Dump Info - doIOStmts], page 178Member Functions:SgInputOutputStmt(int variant, SgExpression &specList, SgExpression &itemList)66Chapter 3: StatementsSgExpression * specList()void setSpecList(SgExpression &specList)SgExpression * itemList()void setItemList(SgExpression &itemList)SgIOControlStmtRepresents Fortran open, close, inquire, backspace, rewind, endle, and format.For base class, see [SgExecutableStatement], page 54.class SgIOControlStmt: public SgExecutableStatement {// fortran input/output control and editing statements// variant = OPEN_STAT, CLOSE_STAT, INQUIRE_STAT, BACKSPACE_STAT,// REWIND_STAT, ENDFILE_STAT, FORMAT_STATpublic:SgIOControlStmt(int variant,SgExpression &controlSpecifierList);SgExpression * controlSpecList();voidsetControlSpecList(SgExpression &controlSpecList);};SgIOControlStmt is used in the following places in the example programs: see [Dump Info - doIOStmts], page 178Member Functions:SgIOControlStmt(int variant, SgExpression &controlSpecierList)SgExpression * controlSpecList()void setControlSpecList(SgExpression &controlSpecList)67Chapter 3: StatementsSgCycleStmtRepresents Fortran 90 cycle statements.For base class, see [SgExecutableStatement], page 54.class SgCycleStmt: public SgExecutableStatement {// the fortran 90 cycle statement// variant == CYCLE_STMTpublic:SgCycleStmt(SgSymbol &symbol);SgSymbol * constructName(); // the name of the loop to cyclevoidsetConstructName(SgSymbol &constructName);};Member Functions:SgCycleStmt(SgSymbol &symbol)SgSymbol * constructName()void setConstructName(SgSymbol &constructName)SgExitStmtRepresents Fortran 90 exit statements.For base class, see [SgControlEndStmt], page 55.class SgExitStmt: public SgControlEndStmt {// the fortran 90 exit statement// variant == EXIT_STMTpublic:SgExitStmt(SgSymbol &construct_name);SgSymbol * constructName(); // the name of the loop to cyclevoidsetConstructName(SgSymbol &constructName);};Member Functions:68Chapter 3: StatementsSgExitStmt(SgSymbol &construct name)SgSymbol * constructName()void setConstructName(SgSymbol &constructName)69Chapter 4: Expressions704 ExpressionsMany statements contain expressions.