Exemple #1
0
        String generujIo()
        {
            String io = "";

            foreach (BodkaInfo info in vstupy)
            {
                io += Objekt.tabulator(2) + "input " + info.meno;
                if (info.bitSirka > 1)
                {
                    io += "[" + info.bitSirka + "]";
                }
                io += "[" + info.bitDlzka + "],\r\n";
            }
            for (int i = 0; i < vystupy.Count; i++)
            {
                BodkaInfo info = vystupy[i];
                io += Objekt.tabulator(2) + "output " + info.meno;
                if (info.bitSirka > 1)
                {
                    io += "[" + info.bitSirka + "]";
                }
                io += "[" + info.bitDlzka + "]";
                if (i + 1 < vystupy.Count)
                {
                    io += ",";
                }
                io += "\r\n";
            }
            io += Objekt.tabulator(1) + ") {\r\n\r\n";
            return(io);
        }
Exemple #2
0
        void vytvorIoOperaciu(object sender, EventArgs e, String op, BodkaInfo info)
        {
            String id = modul.getOpId(op);

            modul.objekty.Add(id, new IoOperacia(clickX, clickY, id, op, info));
            modul.objekty[id].setM(modul);
            aktualizujPlochu();
        }
Exemple #3
0
 public IoOperacia(int nX, int nY, String nId, String nOp, BodkaInfo b = null)
     : base(nX, nY, nId, nOp)
 {
     bg = Brushes.LightBlue;
     if (b != null)
     {
         bodky[0].info = b;
     }
 }
Exemple #4
0
 public ObjektBodka(int nX, int nY, Brush nStav, Objekt nObj, int nId, BodkaInfo nInfo)
     : base(nX, nY, 4, nStav)
 {
     obj = nObj;
     id  = nId;
     if (nInfo != null)
     {
         info = new BodkaInfo(nInfo.meno, nInfo.bitSirka, nInfo.bitSirkaZmena, nInfo.bitDlzka, nInfo.bitDlzkaZmena);
     }
 }
Exemple #5
0
        public override bool Equals(object obj)
        {
            BodkaInfo other = obj as BodkaInfo;

            if (other == null)
            {
                return(false);
            }
            return(this.meno == other.meno && this.bitSirka == other.bitSirka && this.bitDlzka == other.bitDlzka && this.typ == other.typ && this.bitSirkaZmena == other.bitSirkaZmena && this.bitDlzkaZmena == other.bitDlzkaZmena);
        }
Exemple #6
0
        void vystupComboBoxSelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox   cb = (ComboBox)sender;
            BodkaInfo  b  = modul.vystupy[cb.SelectedIndex];
            IoOperacia io = (IoOperacia)modul.objekty[click];

            io.bodky[0].info = b;
            io.zrusEditovaciePrvky(panel1);
            io.nastavEditovaciePrvky(panel1);
            vstupComboBox();
            io.pridajOkTlacitko(this);
            aktualizujPlochu();
        }
Exemple #7
0
        public void vytvorDatabazu()
        {
            List <BodkaInfo> VSTUP_INT = new List <BodkaInfo> {
                BodkaInfo.INT("op")
            };
            List <BodkaInfo> BIN_VSTUPY_INT = new List <BodkaInfo> {
                BodkaInfo.INT("op1"), BodkaInfo.INT("op2")
            };
            List <BodkaInfo> VYSTUP_INT = new List <BodkaInfo> {
                BodkaInfo.INT("res")
            };
            List <BodkaInfo> VSTUP_BOOL = new List <BodkaInfo> {
                BodkaInfo.BOOL("op")
            };
            List <BodkaInfo> BIN_VSTUPY_BOOL = new List <BodkaInfo> {
                BodkaInfo.BOOL("op1"), BodkaInfo.BOOL("op2")
            };
            List <BodkaInfo> VYSTUP_BOOL = new List <BodkaInfo> {
                BodkaInfo.BOOL("res")
            };

            DATABAZA = new Dictionary <String, ObjektInfo>();
            //Hodnoty
            DATABAZA["const"] = new ObjektInfo("const", "Konštanta", null, VYSTUP_INT);
            DATABAZA["index"] = new ObjektInfo("index", "Prvok z poľa",
                                               new List <BodkaInfo> {
                new BodkaInfo("pole", 1, true, 32, true),
                BodkaInfo.INT("index")
            },
                                               new List <BodkaInfo> {
                new BodkaInfo("out", 1, true, 32, true)
            });
            //IO operácie
            DATABAZA["in"] = new ObjektInfo("in", "Vstup", null,
                                            new List <BodkaInfo> {
                BodkaInfo.INT("in")
            });
            DATABAZA["out"] = new ObjektInfo("out", "Výstup",
                                             new List <BodkaInfo> {
                BodkaInfo.INT("out")
            }, null);
            //Aritmetické operácie
            DATABAZA["add"] = new ObjektInfo("+", "Sčítanie", BIN_VSTUPY_INT, VYSTUP_INT);
            DATABAZA["sub"] = new ObjektInfo("-", "Odčítanie", BIN_VSTUPY_INT, VYSTUP_INT);
            DATABAZA["mul"] = new ObjektInfo("*", "Násobenie", BIN_VSTUPY_INT, VYSTUP_INT);
            DATABAZA["div"] = new ObjektInfo("/", "Celočíselné delenie", BIN_VSTUPY_INT, VYSTUP_INT);
            DATABAZA["mod"] = new ObjektInfo("%", "Zvyšok po delení", BIN_VSTUPY_INT, VYSTUP_INT);
            DATABAZA["inc"] = new ObjektInfo("++", "Inkrementácia", VSTUP_INT, VYSTUP_INT);
            DATABAZA["dec"] = new ObjektInfo("--", "Dekrementácia", VSTUP_INT, VYSTUP_INT);
            //Bitové operácie
            DATABAZA["bit_and"]     = new ObjektInfo("&&", "AND", BIN_VSTUPY_INT, VYSTUP_INT);
            DATABAZA["bit_or"]      = new ObjektInfo("|", "OR", BIN_VSTUPY_INT, VYSTUP_INT);
            DATABAZA["bit_xor"]     = new ObjektInfo("^", "XOR", BIN_VSTUPY_INT, VYSTUP_INT);
            DATABAZA["bit_not"]     = new ObjektInfo("~", "NOT", VSTUP_INT, VYSTUP_INT);
            DATABAZA["shift_left"]  = new ObjektInfo("<<", "Bitový posun do ľava", BIN_VSTUPY_INT, VYSTUP_INT);
            DATABAZA["shift_right"] = new ObjektInfo(">>", "Bitový posun do prava", BIN_VSTUPY_INT, VYSTUP_INT);
            //Logické operácie
            DATABAZA["log_and"] = new ObjektInfo("&&&&", "AND", BIN_VSTUPY_BOOL, VYSTUP_BOOL);
            DATABAZA["log_or"]  = new ObjektInfo("||", "OR", BIN_VSTUPY_BOOL, VYSTUP_BOOL);
            DATABAZA["log_not"] = new ObjektInfo("!", "NOT", VSTUP_BOOL, VYSTUP_BOOL);
            //Porovnávacie operácie
            DATABAZA["gt"]     = new ObjektInfo(">", "Väčší", BIN_VSTUPY_INT, VYSTUP_BOOL);
            DATABAZA["gteq"]   = new ObjektInfo(">=", "Väčší alebo rovný", BIN_VSTUPY_INT, VYSTUP_BOOL);
            DATABAZA["lt"]     = new ObjektInfo("<", "Menší", BIN_VSTUPY_INT, VYSTUP_BOOL);
            DATABAZA["lteq"]   = new ObjektInfo("<=", "Menší alebo rovný", BIN_VSTUPY_INT, VYSTUP_BOOL);
            DATABAZA["eq"]     = new ObjektInfo("==", "Rovná sa", BIN_VSTUPY_INT, VYSTUP_BOOL);
            DATABAZA["noteq"]  = new ObjektInfo("!=", "Nerovná sa", BIN_VSTUPY_INT, VYSTUP_BOOL);
            DATABAZA["concat"] = new ObjektInfo("c", "Zreťazenie", new List <BodkaInfo> {
                new BodkaInfo("op1", 1, true, 32, true),
                new BodkaInfo("op2", 1, true, 32, true)
            },
                                                new List <BodkaInfo> {
                new BodkaInfo("res", 2, true, 32, true)
            });
            DATABAZA["reverse"] = new ObjektInfo("r", "Otočenie bitov", new List <BodkaInfo> {
                new BodkaInfo("op", 1, true, 32, true)
            },
                                                 new List <BodkaInfo> {
                new BodkaInfo("res", 1, true, 32, true)
            });
            DATABAZA["change"] = new ObjektInfo("-|=", "Zmena bitovej šírky", new List <BodkaInfo> {
                new BodkaInfo("op", 1, true, 32, true)
            },
                                                new List <BodkaInfo> {
                new BodkaInfo("res", 1, true, 32, true)
            });                                                                                           //
            DATABAZA["if"] = new ObjektInfo("if", "Podmienkový blok", new List <BodkaInfo> {
                BodkaInfo.BOOL("podmienka")
            }, null);
            //Register
            DATABAZA["regC"] = new ObjektInfo("regC", "Čítaj z registra", null, new List <BodkaInfo> {
                new BodkaInfo("out", 1, true, 32, true)
            });                                                                                                                                       //
            DATABAZA["regZ"] = new ObjektInfo("regZ", "Zapíš do registra", new List <BodkaInfo> {
                new BodkaInfo("data", 1, true, 32, true)
            }, null);
            DATABAZA["regZ_index"] = new ObjektInfo("regZ_index", "Zapíš do registra na index",
                                                    new List <BodkaInfo> {
                new BodkaInfo("data", 1, false, 32, true),
                new BodkaInfo("index", 1, false, 32, true)
            }, null);
            //Vlastné moduly
            DATABAZA["main"] = new ObjektInfo("main", "main", null, null, true);
        }
Exemple #8
0
        public void nacitajDWKod()
        {
            while (a.token != "")
            {
                if (isToken("]"))
                {
                    return;
                }
                if (isToken("def"))
                {
                    String fMeno = popToken();
                    getToken("[");
                    objekty  = new Dictionary <String, Objekt>();
                    registre = new List <RegisterInfo>();
                    vstupy   = new List <BodkaInfo>();
                    vystupy  = new List <BodkaInfo>();
                    nacitajDWKod();
                    Modul f = new Modul(fMeno, objekty, vstupy, vystupy, registre, poleBodiek, poleIndexov);
                    poleBodiek  = null;
                    poleIndexov = null;
                    moduly.Add(f);
                    if (f.meno != "main")
                    {
                        Projekt.DATABAZA[f.meno] = new ObjektInfo(f.meno, f.meno, vstupy, vystupy);
                    }
                }
                else if (isToken("input"))
                {
                    String   vstup = popToken();
                    IntTuple bit   = getTagIntTuple();
                    vstupy.Add(new BodkaInfo(vstup, bit.a, false, bit.b, false));
                }
                else if (isToken("output"))
                {
                    String   vystup = popToken();
                    IntTuple bit    = getTagIntTuple();
                    vystupy.Add(new BodkaInfo(vystup, bit.a, false, bit.b, false));
                }
                else if (isToken("register"))
                {
                    String   register = popToken();
                    IntTuple bit      = getTagIntTuple();
                    registre.Add(new RegisterInfo(register, bit.a, bit.b));
                }
                else if (isToken("#"))
                {
                    nacitajGraf();
                }
                else
                {
                    getToken("{");
                    String id = popToken();
                    getToken("}");

                    if (isToken("call") || isToken("use"))
                    {
                        String   menoModulu = popToken();
                        IntTuple sur        = getTagIntTuple();
                        volania.Add(new TempPouzitieModulu(moduly.Count, sur, id, menoModulu));
                    }
                    else if (isToken("const"))
                    {
                        List <String> values = new List <String>();
                        getToken("(");
                        while (!isToken(")"))
                        {
                            values.Add(popToken());
                        }
                        IntTuple bit = getTagIntTuple();
                        IntTuple sur = getTagIntTuple();
                        objekty[id] = new Konst(sur.a, sur.b, id, "const", bit.a, bit.b, values.ToArray());
                    }

                    else if (isToken("in"))
                    {
                        String    io  = popToken();
                        IntTuple  sur = getTagIntTuple();
                        BodkaInfo b   = getVstup(io);
                        objekty[id] = new IoOperacia(sur.a, sur.b, id, "in", b);
                    }
                    else if (isToken("out"))
                    {
                        String    io  = popToken();
                        IntTuple  sur = getTagIntTuple();
                        BodkaInfo b   = getVystup(io);
                        objekty[id] = new IoOperacia(sur.a, sur.b, id, "out", b);
                    }
                    else if (isToken("regC"))
                    {
                        String       register = popToken();
                        IntTuple     sur      = getTagIntTuple();
                        RegisterInfo r        = getRegister(register);
                        objekty[id] = new RegisterC(sur.a, sur.b, id, r);
                    }
                    else if (isToken("regZ"))
                    {
                        String       register = popToken();
                        IntTuple     sur      = getTagIntTuple();
                        RegisterInfo r        = getRegister(register);
                        objekty[id] = new RegisterZ(sur.a, sur.b, id, r);
                    }
                    else if (isToken("regZ_index"))
                    {
                        String       register = popToken();
                        IntTuple     sur      = getTagIntTuple();
                        RegisterInfo r        = getRegister(register);
                        objekty[id] = new RegisterZIndex(sur.a, sur.b, id, r);
                    }

                    else if (isToken("change"))
                    {
                        IntTuple bit = getTagIntTuple();
                        IntTuple sur = getTagIntTuple();
                        objekty[id] = new ZmenaBitov(sur.a, sur.b, id, bit.a, bit.b);
                    }
                    else
                    {
                        objekty[id] = nacitajOp(id);
                    }
                }
            }
        }
Exemple #9
0
        void vytvorContextMenu(object sender, System.ComponentModel.CancelEventArgs e)
        {
            contextMenuStrip.Items.Clear();

            if (modul == null)
            {
                return;
            }

            ToolStripMenuItem level1;

            ToolStripMenuItem[] level2;
            ToolStripMenuItem[] level3;

            //----------------------------------

            level2 = new ToolStripMenuItem[2];

            level2[0] = new ToolStripMenuItem(Projekt.DATABAZA["const"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "const"));
            level2[1] = new ToolStripMenuItem(Projekt.DATABAZA["index"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "index"));

            level1 = new ToolStripMenuItem("Hodnoty", null, level2);
            contextMenuStrip.Items.Add(level1);

            //----------------------------------

            level2 = new ToolStripMenuItem[2];

            level3 = new ToolStripMenuItem[modul.vstupy.Count];
            for (int j = 0; j < modul.vstupy.Count; j++)
            {
                BodkaInfo vstup = modul.vstupy[j];
                level3[j] = new ToolStripMenuItem(modul.vstupy[j].meno, null, (sender2, e2) => vytvorIoOperaciu(sender2, e2, "in", vstup));
            }
            level2[0] = new ToolStripMenuItem(Projekt.DATABAZA["in"].text, null, level3);
            level3    = new ToolStripMenuItem[modul.vystupy.Count];
            for (int j = 0; j < modul.vystupy.Count; j++)
            {
                BodkaInfo vystup = modul.vystupy[j];
                level3[j] = new ToolStripMenuItem(modul.vystupy[j].meno, null, (sender2, e2) => vytvorIoOperaciu(sender2, e2, "out", vystup));
            }
            level2[1] = new ToolStripMenuItem(Projekt.DATABAZA["out"].text, null, level3);


            level1 = new ToolStripMenuItem("IO operácie", null, level2);
            contextMenuStrip.Items.Add(level1);

            //----------------------------------

            level2 = new ToolStripMenuItem[7];

            level2[0] = new ToolStripMenuItem(Projekt.DATABAZA["add"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "add"));
            level2[1] = new ToolStripMenuItem(Projekt.DATABAZA["sub"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "sub"));
            level2[2] = new ToolStripMenuItem(Projekt.DATABAZA["mul"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "mul"));
            level2[3] = new ToolStripMenuItem(Projekt.DATABAZA["div"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "div"));
            level2[4] = new ToolStripMenuItem(Projekt.DATABAZA["mod"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "mod"));
            level2[5] = new ToolStripMenuItem(Projekt.DATABAZA["inc"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "inc"));
            level2[6] = new ToolStripMenuItem(Projekt.DATABAZA["dec"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "dec"));

            level1 = new ToolStripMenuItem("Aritmetické operácie", null, level2);
            contextMenuStrip.Items.Add(level1);

            //----------------------------------

            level2 = new ToolStripMenuItem[6];

            level2[0] = new ToolStripMenuItem(Projekt.DATABAZA["bit_and"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "bit_and"));
            level2[1] = new ToolStripMenuItem(Projekt.DATABAZA["bit_or"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "bit_or"));
            level2[2] = new ToolStripMenuItem(Projekt.DATABAZA["bit_xor"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "bit_xor"));
            level2[3] = new ToolStripMenuItem(Projekt.DATABAZA["bit_not"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "bit_not"));
            level2[4] = new ToolStripMenuItem(Projekt.DATABAZA["shift_left"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "shift_left"));
            level2[5] = new ToolStripMenuItem(Projekt.DATABAZA["shift_right"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "shift_right"));

            level1 = new ToolStripMenuItem("Bitové operácie", null, level2);
            contextMenuStrip.Items.Add(level1);

            //----------------------------------

            level2 = new ToolStripMenuItem[3];

            level2[0] = new ToolStripMenuItem(Projekt.DATABAZA["log_and"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "log_and"));
            level2[1] = new ToolStripMenuItem(Projekt.DATABAZA["log_or"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "log_or"));
            level2[2] = new ToolStripMenuItem(Projekt.DATABAZA["log_not"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "log_not"));

            level1 = new ToolStripMenuItem("Logické operácie", null, level2);
            contextMenuStrip.Items.Add(level1);

            //----------------------------------

            level2 = new ToolStripMenuItem[6];

            level2[0] = new ToolStripMenuItem(Projekt.DATABAZA["gt"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "gt"));
            level2[1] = new ToolStripMenuItem(Projekt.DATABAZA["gteq"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "gteq"));
            level2[2] = new ToolStripMenuItem(Projekt.DATABAZA["lt"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "lt"));
            level2[3] = new ToolStripMenuItem(Projekt.DATABAZA["lteq"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "lteq"));
            level2[4] = new ToolStripMenuItem(Projekt.DATABAZA["eq"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "eq"));
            level2[5] = new ToolStripMenuItem(Projekt.DATABAZA["noteq"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "noteq"));

            level1 = new ToolStripMenuItem("Porovnávacie operácie", null, level2);
            contextMenuStrip.Items.Add(level1);

            //----------------------------------

            level2 = new ToolStripMenuItem[4];

            level2[0] = new ToolStripMenuItem(Projekt.DATABAZA["concat"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "concat"));
            level2[1] = new ToolStripMenuItem(Projekt.DATABAZA["reverse"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "reverse"));
            level2[2] = new ToolStripMenuItem(Projekt.DATABAZA["change"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "change"));
            level2[3] = new ToolStripMenuItem(Projekt.DATABAZA["if"].text, null, (sender2, e2) => vytvorOperaciu(sender2, e2, "if"));

            level1 = new ToolStripMenuItem("Ďalšie operácie", null, level2);
            contextMenuStrip.Items.Add(level1);

            //----------------------------------

            List <String> pole;

            if (modul.registre.Count > 0)
            {
                level2 = new ToolStripMenuItem[3];
                pole   = new List <String> {
                    "regC", "regZ", "regZ_index"
                };
                for (int i = 0; i < pole.Count; i++)
                {
                    String op = pole[i];
                    level3 = new ToolStripMenuItem[modul.registre.Count];
                    for (int j = 0; j < modul.registre.Count; j++)
                    {
                        RegisterInfo reg = modul.registre[j];
                        level3[j] = new ToolStripMenuItem(modul.registre[j].meno, null, (sender2, e2) => vytvorRegisterOperaciu(sender2, e2, op, reg));
                    }
                    level2[i] = new ToolStripMenuItem(Projekt.DATABAZA[pole[i]].text, null, level3);
                }

                level1 = new ToolStripMenuItem("Register", null, level2);
                contextMenuStrip.Items.Add(level1);
            }

            //----------------------------------

            pole = new List <String>();
            foreach (Modul m in projekt.moduly)
            {
                if (m.meno != "main" && modul != m)
                {
                    pole.Add(m.meno);
                }
            }

            if (pole.Count > 0)
            {
                level2 = new ToolStripMenuItem[pole.Count];
                for (int i = 0; i < pole.Count; i++)
                {
                    String f = pole[i];
                    level2[i] = new ToolStripMenuItem(Projekt.DATABAZA[pole[i]].text, null, (sender2, e2) => vytvorVolanieOperaciu(sender2, e2, f));
                }

                level1 = new ToolStripMenuItem("Vlastné moduly", null, level2);
                contextMenuStrip.Items.Add(level1);
            }
        }