plonky2/evm/src/cpu/kernel/evm_asm.pest
Daniel Lubarov 7b75eaa98d
ASM macro support (#580)
* ASM macro support

Also recognize global labels as a PUSH target; previously it only considered local labels.

* macro test
2022-06-25 23:10:08 -07:00

26 lines
1.0 KiB
Plaintext

// Grammar for our EVM assembly code.
// Loosely based on https://gist.github.com/axic/17ddbbce4738ccf4040d30cbb5de484e
WHITESPACE = _{ " " | "\t" | NEWLINE }
COMMENT = _{ "/*" ~ (!"*/" ~ ANY)* ~ "*/" | "//" ~ (!NEWLINE ~ ANY)* ~ NEWLINE }
identifier_first_char = _{ ASCII_ALPHA | "_" }
identifier_char = _{ ASCII_ALPHANUMERIC | "_" }
identifier = @{ identifier_first_char ~ identifier_char* }
literal_decimal = @{ ASCII_DIGIT+ }
literal_hex = @{ ^"0x" ~ ASCII_HEX_DIGIT+ }
literal = { literal_hex | literal_decimal }
item = { macro_def | macro_call | global_label | local_label | bytes_item | push_instruction | nullary_instruction }
macro_def = { ^"%macro" ~ identifier ~ item* ~ ^"%endmacro" }
macro_call = ${ "%" ~ !(^"macro" | ^"endmacro") ~ identifier }
global_label = { ^"GLOBAL " ~ identifier ~ ":" }
local_label = { identifier ~ ":" }
bytes_item = { ^"BYTES " ~ literal ~ ("," ~ literal)* }
push_instruction = { ^"PUSH " ~ (literal | identifier) }
nullary_instruction = { identifier }
file = { SOI ~ item* ~ silent_eoi }
silent_eoi = _{ !ANY }