Ich mache eine RAM Machine Emulator in Typoskript definieren, so machte ich eine Enumeration der Befehlstypen, die ein RAM aufweisen kann:Wie einen Hash mit Enum Schlüssel in Typoskript
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.
}
ich sicher machen müssen Jeder Befehl hat einen gültigen Operandentyp. Meine Art und Weise der gültigen Operanden zu definieren, ist wie folgt:
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],
}
Aber ich finde, dass das Typoskript ‚Compiler‘ kümmert sich nicht darum, was ich in dem Schlüssel values-- habe ich LOAD:
zu LOADXYZ:
ändern kann und es gewann tu ein Auge.
Auch, wenn ich versuche, es zu, dies zu ändern:
var valid_operands = {
InsType.LOAD: [OpType.NUM_LITERAL, OpType.NUM_DIRECT, OpType.NUM_INDIRECT],
...
Es warnt ':' expected at line XX col YY
(diejenigen, die Position des .
ist). Ich benutze das Atom TypeScript-Plugin, wenn es hilft. Jede Hilfe wird geschätzt.
Danke, das ist auch eine gültige Antwort. Die Art und Weise, wie es sich von dem unterscheidet, was ich getan habe, ist, dass es die Schlüssel- und Werttypen erzwingt, so dass es besser geeignet ist, stark typisierte Programme zu schreiben. –
Es gibt immer noch das kleine Problem der Strenge. Sie können der Map nach der Erstellung Elemente hinzufügen. – user1740331