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); }
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(); }
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; } }
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); } }
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); }
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(); }
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); }
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); } } } }
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); } }