# Parser-PKB API Iteration 2 Additions ```java= // PKB cannot obtain range of procedures, so this API will be useful. Pass in the first and last stmts of every procedure. void addProcedureStmtRange(STMT_NO firstStmtNo, STMT_NO lastStmtNo); // The PKB is able to obtain the first and last stmt of while blocks and if blocks using its Parent* linkages. // However, it is unable to ascertain the end of a then block and the start of a else block. // This API is thus to allocate the cut-off point for the if block in question (represented by its statement number) void addIfBlockSplit(STMT_NO ifStmtNo, STMT_NO firstElseBlkStmtNo); ``` # PARSER-PKB API v0.1 (Headers Only) While creating the AST, the Parser will call Parser-PKB APIs to update its vartable entries regarding design entities & abstractions. This stage is referred to as "pre-processing". After the AST construction is complete, it will call `setAST` which will then trigger "post-processing" (finalization of the vartables using information only accessible after the completion of the AST construction). API ideation (and to some extent, justification) be found [here](https://docs.google.com/document/d/13bbHWbFKwuhLJJ5fvMNWm6k6nMNwSs7n_sV3X3izGBE/edit#) from p10 - 12. ## INDIVIDUAL DESIGN ENTITIES ``` //Adds an assignment statement VOID addAssign(STMT stmt, AST node) //Adds a read statement VOID addRead(STMT stmt, AST node) //Adds a print statement VOID addPrint(STMT stmt, AST node) //Adds a call statement VOID addCall(STMT stmt, AST node) //Adds a while statement VOID addWhile(STMT stmt, AST node) //Adds a if statement VOID addIf(STMT stmt, AST node) //Adds a assign statement VOID addAssign(STMT stmt, AST node) //Adds a variable VOID addVariable(STMT stmt, AST node) //Adds a constant VOID addConstant(STMT stmt, AST node) //Adds procedure name var1 VOID addProcedureName(AST var1) ``` ## FOLLOWS ``` // stmt2 follows stmt2 VOID addFollowsRel(STMT stmt1, STMT stmt2) ``` ## PARENT ``` // stmt1 is the parent of stmt2 VOID addParentRel(STMT stmt1, STMT stmt2) ``` ## USES ``` // stmt1 uses var1 VOID addStmtUses(STMT stmt1, AST var1) // Procedure proc1 uses var1 VOID addProcUses(AST proc1, AST var1) // Container stmt cont1 uses var1 VOID addContainerUses(STMT con1, AST var1) ``` ## MODIFIES ``` // stmt1 modifies var1 VOID addStmtModifies(STMT stmt1, AST var1) // Procedure proc1 modifies var1 VOID addProcModifies(AST proc1, AST var1) // Container stmt cont1 modifies var1 VOID addContainerModifies(STMT con1, AST var1) ``` ## CALLS ``` //add procedure being called VOID addCalledProc(AST callStmt, VAR procName) //add procedure call is in VOID addProcCall(AST procName, AST callStmt) //add container call is in VOID addContainerCall(AST con1, AST callStmt) ``` ## AST ``` // set root of AST VOID setAST(AST root) ``` # Under discussion ## ASSIGNMENT (kiv) ``` // set assignment for statement stmt1 between var1 and nodeRight VOID addStmtAssignment(STMT stmt1, VAR var1, AST nodeRight) ```