Вам понадобится электронная таблица
Неважно, какой из них, Excel хорош, я использую Google Sheets, пока это делает заполнение перетаскивания, это все, что вам нужно.
Проблема
Представьте, что у вас есть много схожего кода, например, это код для функции «разборка» в моем симуляторе RedCode
switch (ins.opcode) { case DAT:ret.opcode = "DAT"; break; case MOV:ret.opcode = "MOV"; break; case ADD:ret.opcode = "ADD"; break; case SUB:ret.opcode = "SUB"; break; case MUL:ret.opcode = "MUL"; break; case DIV:ret.opcode = "DIV"; break; case MOD:ret.opcode = "MOD"; break; case JMP:ret.opcode = "JMP"; break; case JMZ:ret.opcode = "JMZ"; break; case JMN:ret.opcode = "JMN"; break; case DJN:ret.opcode = "DJN"; break; case CMP:ret.opcode = "CMP"; break; case SEQ:ret.opcode = "SEQ"; break; case SNE:ret.opcode = "SNE"; break; case SLT:ret.opcode = "SLT"; break; case SPL:ret.opcode = "SPL"; break; case NOP:ret.opcode = "NOP"; break; }
Этот болезненный код делает утомительную вещь превращения значения перечисления в строковое представление этого значения перечисления (да, есть более автоматизированные способы сделать это, но они просто странные) Так что это можно распечатать. Скучный, легкий код. Просто скопируйте вставку, издайте, пока они не закончат.
За исключением магии с небольшим количеством электронных таблиц, вы можете сделать то же самое за несколько секунд, что действительно удобно, когда вам придется напечатать код, как это:
opcodeTable[DAT] = &opDAT opcodeTable[MOV] = &opMOV opcodeTable[ADD] = &opADD opcodeTable[SUB] = &opSUB opcodeTable[MUL] = &opMUL opcodeTable[DIV] = &opDIV opcodeTable[MOD] = &opMOD opcodeTable[JMP] = &opJMP opcodeTable[JMZ] = &opJMZ opcodeTable[JMN] = &opJMN opcodeTable[DJN] = &opDJN opcodeTable[CMP] = &opCMP opcodeTable[SEQ] = &opSEQ opcodeTable[SNE] = &opSNE opcodeTable[SLT] = &opSLT opcodeTable[SPL] = &opSPL
Разбейте электронную таблицу!
Вместо того, чтобы рассматривать это как отдельные ряды текста, рассматривать его как столбцы текста, большинство из которых идентичны. Единственный бит, который меняется, — это «DAT», «MOV», «добавить» часть.
Так что сделайте вашу электронную таблицу содержать эти колонны …
Обратите внимание, как в ячейке D1 есть формула, чтобы скопировать содержимое B1, чтобы сохранить повторное применение Opcode.
Далее введите все опкоды в столбец B. Это требует некоторых усилий, но это единственный раз, когда вам нужно это сделать
И теперь используйте удивительную функцию заполнения Drag-Fill, встроенную в каждую программу электронной таблицы с середины 90-х годов, и посмотрите, как код пишет сам…
Теперь все, что вам нужно сделать, это скопировать электронную таблицу в свой редактор кода
opcodeTable[ DAT ] = &op DAT opcodeTable[ MOV ] = &op MOV opcodeTable[ ADD ] = &op ADD opcodeTable[ SUB ] = &op SUB opcodeTable[ MUL ] = &op MUL opcodeTable[ DIV ] = &op DIV
Теперь единственное, что нужно следить за тем, чтобы вставка кода приведет к тому, что символ вкладки будет помещен между каждой ячейкой. Это может или не может быть тем, что вы хотите. Если вам это не нравится, просто используйте функциональность вашего редактора поиска и заведения, чтобы найти символ вкладки и замените его ни на что. Не можете ввести символ вкладки в поле Search-Replace? Просто скопируйте и вставьте один из кода.
Обратите внимание, что если бы этот код выше был C ++, он не скомпилировался, из-за отсутствующего полуколона? Хорошо исправление, это всего лишь случай добавления одного к концу электронной таблицы и перетаскивания ее.
Оригинал: «https://dev.to/ncot_tech/how-to-write-emulator-automating-tedious-programming-with-excel-9f0»