public SemanticAnalyzer() { symbolTable = new SymbolTable(); procedureTable = new ProcedureTable(); procedureTable["WrInt"] = new ProcedureTable.Row(Type.VOID, true); procedureTable["WrInt"].symbols["i"] = new SymbolTable.Row(Type.INT, Kind.PARAM, 0); procedureTable["WrStr"] = new ProcedureTable.Row(Type.VOID, true); procedureTable["WrStr"].symbols["s"] = new SymbolTable.Row(Type.STRING, Kind.PARAM, 0); procedureTable["WrBool"] = new ProcedureTable.Row(Type.VOID, true); procedureTable["WrBool"].symbols["b"] = new SymbolTable.Row(Type.BOOL, Kind.PARAM, 0); procedureTable["WrLn"] = new ProcedureTable.Row(Type.VOID, true); procedureTable["RdInt"] = new ProcedureTable.Row(Type.INT, true); procedureTable["RdStr"] = new ProcedureTable.Row(Type.STRING, true); procedureTable["AtStr"] = new ProcedureTable.Row(Type.STRING, true); procedureTable["AtStr"].symbols["s"] = new SymbolTable.Row(Type.STRING, Kind.PARAM, pos: 0); procedureTable["AtStr"].symbols["i"] = new SymbolTable.Row(Type.INT, Kind.PARAM, pos: 1); procedureTable["LenStr"] = new ProcedureTable.Row(Type.INT, true); procedureTable["LenStr"].symbols["s"] = new SymbolTable.Row(Type.STRING, Kind.PARAM, pos: 0); procedureTable["CmpStr"] = new ProcedureTable.Row(Type.INT, true); procedureTable["CmpStr"].symbols["s1"] = new SymbolTable.Row(Type.STRING, Kind.PARAM, pos: 0); procedureTable["CmpStr"].symbols["s2"] = new SymbolTable.Row(Type.STRING, Kind.PARAM, pos: 1); procedureTable["CatStr"] = new ProcedureTable.Row(Type.STRING, true); procedureTable["CatStr"].symbols["s1"] = new SymbolTable.Row(Type.STRING, Kind.PARAM, pos: 0); procedureTable["CatStr"].symbols["s2"] = new SymbolTable.Row(Type.STRING, Kind.PARAM, pos: 1); procedureTable["LenLstInt"] = new ProcedureTable.Row(Type.INT, true); procedureTable["LenLstInt"].symbols["loi"] = new SymbolTable.Row(Type.INT_LIST, Kind.PARAM, pos: 0); procedureTable["LenLstStr"] = new ProcedureTable.Row(Type.INT, true); procedureTable["LenLstStr"].symbols["los"] = new SymbolTable.Row(Type.STRING_LIST, Kind.PARAM, pos: 0); procedureTable["LenLstBool"] = new ProcedureTable.Row(Type.INT, true); procedureTable["LenLstBool"].symbols["lob"] = new SymbolTable.Row(Type.BOOL_LIST, Kind.PARAM, pos: 0); procedureTable["NewLstInt"] = new ProcedureTable.Row(Type.INT_LIST, true); procedureTable["NewLstInt"].symbols["size"] = new SymbolTable.Row(Type.INT, Kind.PARAM, pos: 0); procedureTable["NewLstStr"] = new ProcedureTable.Row(Type.STRING_LIST, true); procedureTable["NewLstStr"].symbols["size"] = new SymbolTable.Row(Type.INT, Kind.PARAM, pos: 0); procedureTable["NewLstBool"] = new ProcedureTable.Row(Type.BOOL_LIST, true); procedureTable["NewLstBool"].symbols["size"] = new SymbolTable.Row(Type.INT, Kind.PARAM, pos: 0); procedureTable["IntToStr"] = new ProcedureTable.Row(Type.STRING, true); procedureTable["IntToStr"].symbols["i"] = new SymbolTable.Row(Type.INT, Kind.PARAM, pos: 0); procedureTable["StrToInt"] = new ProcedureTable.Row(Type.INT, true); procedureTable["StrToInt"].symbols["s"] = new SymbolTable.Row(Type.STRING, Kind.PARAM, pos: 0); }
public CILGenerator(SymbolTable symbolTable, ProcedureTable procedureTable) { this.symbolTable = symbolTable; this.procedureTable = procedureTable; this.builder.Clear(); }
public SemanticAnalyzer() { procName = ""; inCycle = 0; numParams = 0; listOrderParams = new List <dynamic>(); inProcedure = false; isParam = false; symbolTable = new SymbolTable(); LocalSTable = new SymbolTable(); procedureTable = new ProcedureTable(); localSTables = new SortedDictionary <string, SymbolTable>(); string predefined = "P"; SymbolTable sTable = new SymbolTable(); procedureTable["WrInt"] = new Procedures(Type.VOID, 1, predefined, new List <dynamic>() { Type.INT }, sTable); procedureTable["WrStr"] = new Procedures(Type.VOID, 1, predefined, new List <dynamic>() { Type.STRING }, sTable); procedureTable["WrBool"] = new Procedures(Type.VOID, 1, predefined, new List <dynamic>() { Type.BOOL }, sTable); procedureTable["WrLn"] = new Procedures(Type.VOID, 0, predefined, new List <dynamic>(), sTable); procedureTable["RdInt"] = new Procedures(Type.INT, 0, predefined, new List <dynamic>(), sTable); procedureTable["RdStr"] = new Procedures(Type.STRING, 0, predefined, new List <dynamic>(), sTable); procedureTable["AtStr"] = new Procedures(Type.STRING, 2, predefined, new List <dynamic>() { Type.STRING, Type.INT }, sTable); procedureTable["LenStr"] = new Procedures(Type.INT, 1, predefined, new List <dynamic>() { Type.STRING }, sTable); procedureTable["CmpStr"] = new Procedures(Type.INT, 2, predefined, new List <dynamic>() { Type.STRING, Type.STRING }, sTable); procedureTable["CatStr"] = new Procedures(Type.STRING, 2, predefined, new List <dynamic>() { Type.STRING, Type.STRING }, sTable); procedureTable["LenLstInt"] = new Procedures(Type.INT, 1, predefined, new List <dynamic>() { Type.LIST_OF_INT }, sTable); procedureTable["LenLstStr"] = new Procedures(Type.INT, 1, predefined, new List <dynamic>() { Type.LIST_OF_STRING }, sTable); procedureTable["LenLstBool"] = new Procedures(Type.INT, 1, predefined, new List <dynamic>() { Type.LIST_OF_BOOL }, sTable); procedureTable["NewLstInt"] = new Procedures(Type.LIST_OF_INT, 1, predefined, new List <dynamic>() { Type.INT }, sTable); procedureTable["NewLstStr"] = new Procedures(Type.LIST_OF_STRING, 1, predefined, new List <dynamic>() { Type.INT }, sTable); procedureTable["NewLstBool"] = new Procedures(Type.LIST_OF_BOOL, 1, predefined, new List <dynamic>() { Type.INT }, sTable); procedureTable["IntToStr"] = new Procedures(Type.STRING, 1, predefined, new List <dynamic>() { Type.INT }, sTable); procedureTable["StrToInt"] = new Procedures(Type.INT, 1, predefined, new List <dynamic>() { Type.STRING }, sTable); }