COMMENT: /\/\/[^\n]*/ !opcode: "nop"i | "load"i | "store"i | "add"i | "sub"i | "and"i | "or"i | "not"i | "xor"i | "seth"i | "shr"i | "cmp"i | "mul"i | "beq"i | "set"i | "bneq"i !register: REGISTER | "sp"i | "lr"i | "pc"i LABEL: /[a-z_]\w*/i REGISTER: /[Rr]\d+/ start: line* ?line: label | statement | raw_word | symbol_def label: LABEL ":" statement: opcode [param ("," param)*] !label_ref: LABEL !immediate: SIGNED_NUMBER | HEX_LITTERAL ?param: register | label_ref | reg_offset | immediate reg_offset: "[" register ("," immediate)? "]" raw_word: ".word" immediate symbol_def: ".global" label_ref HEX_LITTERAL: /0x[a-fA-F0-9]+/ %import common.WS %import common.SIGNED_NUMBER %ignore COMMENT %ignore WS