Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 public CILGenerator(SymbolTable symbolTable, ProcedureTable procedureTable)
 {
     this.symbolTable    = symbolTable;
     this.procedureTable = procedureTable;
     this.builder.Clear();
 }
Exemplo n.º 3
0
        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);
        }