我用TypeScript制作了一个RAM Machine模拟器,所以我制作了一个RAM可以拥有的指令类型的枚举:
enum InsType {
LOAD, // Put value from specified register (or literal) into accumulator.
STORE, // Store value from accumulator into specified register.
READ, // Read from input tape and write into specified register.
WRITE, // Write to output tape from specified register.
ADD, // Add value into accumulator.
SUB, // Subtract value from accumulator.
MUL, // Multiply accumulator by referenced (or literal) value.
DIV, // Divide accumulator by referenced (or literal) value.
HALT, // Stop program execution.
JUMP, // Jump unconditionally to line specified by tag.
JZERO, // Jump to line specified by tag if accumulator value is zero.
JGTZ, // Jump to line specified by tag if acc value is greater than zero.
}
我必须确保每条指令都有一个有效的操作数类型。我定义有效操作数的方法如下:
var valid_operands = {
LOAD: [OpType.NUM_LITERAL, OpType.NUM_DIRECT, OpType.NUM_INDIRECT],
STORE: [ OpType.NUM_DIRECT, OpType.NUM_INDIRECT],
READ: [ OpType.NUM_DIRECT, OpType.NUM_INDIRECT],
WRITE: [OpType.NUM_LITERAL, OpType.NUM_DIRECT, OpType.NUM_INDIRECT],
ADD: [OpType.NUM_LITERAL, OpType.NUM_DIRECT, OpType.NUM_INDIRECT],
SUB: [OpType.NUM_LITERAL, OpType.NUM_DIRECT, OpType.NUM_INDIRECT],
MUL: [OpType.NUM_LITERAL, OpType.NUM_DIRECT, OpType.NUM_INDIRECT],
DIV: [OpType.NUM_LITERAL, OpType.NUM_DIRECT, OpType.NUM_INDIRECT],
HALT: [OpType.NONE],
JUMP: [OpType.NAME],
JZERO: [OpType.NAME],
JGTZ: [OpType.NAME],
}
但是我发现TypeScript“编译器”并不关心我在键值中放入了什么--我可以将LOAD:
更改为LOADXYZ:
,它不会眨一下眼睛。
另外,当我尝试将其更改为以下内容时:
var valid_operands = {
InsType.LOAD: [OpType.NUM_LITERAL, OpType.NUM_DIRECT, OpType.NUM_INDIRECT],
...
它警告':' expected at line XX col YY
(这些是.
的位置)。我正在使用Atom TypeScript插件工作,如果它有帮助的话。任何帮助都是感激的。
4条答案
按热度按时间1szpjjfi1#
在
[]
中定义对象键....
bn31dyow2#
您可以使用Map。
pnwntuvh3#
我解决这个问题的方法是分别为每个密钥对赋值。
它工作得很好。但是如果有人找到了一种方法来声明一个带有枚举键的散列,请继续并发布一个答案。:)
5fjcxozz4#
您可以使用:
key in Enum
苏: