Parser

Converts a token stream from a scanner into EVM bytecode.

Members

Functions

parse
ubyte[] parse(Scanner scanner)

Parses the given token stream into a sequence of bytes representing an EVM bytecode program.

Examples

// 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]);

Meta