Рубрики
Uncategorized

Как написать эмулятор — автоматизация утомительного программирования с помощью Excel

Вам понадобится электронная таблица. Не имеет значения, какой из них, Excel хорош, я использую Google, она … Tagged с Devblog, Excel, программирование, DevOps.

Вам понадобится электронная таблица

Неважно, какой из них, 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»