cambridge-asm 0.1.4

Run pseudoassembly from Cambridge International syllabus 9618
// Copyright (c) 2021 Saadi Save
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.

address = { NUMBER+ }
label = @{ ALPHA+ ~ ":" }
op = { ALPHA+ }
immediate = _{ "#" ~ ( "b" | "B" | "x" | "X" )? ~ immedata }
operand = { immediate | address | ALPHA+ }

instruction = ${ ( address | label )? ~ WHITESPACE+? ~ op ~ WHITESPACE+? ~ operand? ~ NEWLINE }
prog = ${ ANYSPACE ~ instruction+ ~ ANYSPACE }

memoryentry = ${ ( address | label ) ~ WHITESPACE+? ~ data? ~ NEWLINE }
memory = ${ ANYSPACE ~ memoryentry+ ~ ANYSPACE }

WHITESPACE = _{ " " | "\t" }
NEWLINE = _{ "\n" }
ANYSPACE = _{ (WHITESPACE | NEWLINE)* }
NUMBER = _{ ('0'..'9') }
ALPHA = _{ ('a'..'z' | 'A'..'Z' ) }
ALPHANUM = _{ ALPHA+ | NUMBER+ }
HEX = _{ ('0'..'9') | ('A'..'F') | ('a'..'f') }
data = { NUMBER+ }
immedata = { HEX+ | NUMBER+ }