Parses the given token stream into a sequence of bytes representing an EVM bytecode program.
// Simple single opcode auto scanner = new Scanner(cast(ubyte[])"ADD"); auto parser = new Parser(); auto bytecode = parser.parse(scanner); assert(bytecode == [0x01]); // Multiple opcodes scanner = new Scanner(cast(ubyte[])"PUSH1 0xfa\nPUSH1 0xab"); bytecode = parser.parse(scanner); assert(bytecode == [Opcode.PUSH1, 0xfa, Opcode.PUSH1, 0xab]); // Mixed stack and push opcodes scanner = new Scanner(cast(ubyte[])"PUSH1 0xfa\nDUP1\nMUL\nPUSH1 0x60\n"); bytecode = parser.parse(scanner); assert(bytecode == [Opcode.PUSH1, 0xfa, Opcode.DUP1, Opcode.MUL, Opcode.PUSH1, 0x60]); // Properly ignores all sorts of whitespace scanner = new Scanner(cast(ubyte[])" \r\nPUSH1\t0xfa\r\nDUP1\n\r\t "); bytecode = parser.parse(scanner); assert(bytecode == [Opcode.PUSH1, 0xfa, Opcode.DUP1]);
Converts a token stream from a scanner into EVM bytecode.