Created
August 6, 2020 20:18
-
-
Save flamewing/aa194543693e05a844aa964a451b42a3 to your computer and use it in GitHub Desktop.
Incomplete m68k grammar
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
label_preffix: "$$" | '@' | '.' | ε | |
label: label_preffix R"[A-Za-z_][A-Za-z0-9_]+" | |
binary_number: '%' R"[0-1]+" | R"0b[0-1]+" | |
octal_number: R"0o[0-7]+" | |
decimal_number: R"[0-9]+" | R"0d[0-9]+" | |
hexadecimal_number: '$' R"[0-9A-Fa-f]+" | R"0x[0-9A-Fa-f]+" | |
// Registers | |
data_register: R"d[0-7]" | |
address_register: R"a[0-7]" | "sp" | |
user_stack_pointer: "usp" | |
program_counter: "pc" | |
conditon_code_register: "ccr" | |
status_register: "sr" | |
// Addressing mode helpers | |
index_size: 'w' | 'l' | |
index_register: data_register | address_register | |
// Addressing modes | |
data_register_direct: data_register | |
address_register_direct: address_register | |
address_register_indirect: '(' address_register ')' | |
address_register_indirect_post_incr: address_register_indirect '+' | |
address_register_indirect_post_decr: '-' address_register_indirect | |
address_register_indirect_displacement: expression_16bitsigned '(' address_register ')' | |
| '(' expression_16bitsigned ',' address_register ')' | |
| '(' address_register ',' expression_16bitsigned ')' | |
address_register_indirect_with_index: expression_8bitsigned '(' address_register ',' index_register '.' index_size ')' | |
| expression_8bitsigned '(' index_register '.' index_size ',' address_register ')' | |
| '(' expression_8bitsigned ',' address_register ',' index_register '.' index_size ')' | |
| '(' expression_8bitsigned ',' index_register '.' index_size ',' address_register ')' | |
| '(' address_register ',' expression_8bitsigned ',' index_register '.' index_size ')' | |
| '(' index_register '.' index_size ',' expression_8bitsigned ',' address_register ')' | |
| '(' address_register ',' index_register '.' index_size ',' expression_8bitsigned ')' | |
| '(' index_register '.' index_size ',' address_register ',' expression_8bitsigned ')' | |
program_counter_indirect_displacement: offset_16bitsigned '(' program_counter ')' | |
| '(' offset_16bitsigned ',' program_counter ')' | |
| '(' program_counter ',' offset_16bitsigned ')' | |
| offset_16bitsigned | |
program_counter_indirect_with_index: offset_8bitsigned '(' program_counter ',' index_register '.' index_size ')' | |
| offset_8bitsigned '(' index_register '.' index_size ',' program_counter ')' | |
| '(' offset_8bitsigned ',' program_counter ',' index_register '.' index_size ')' | |
| '(' offset_8bitsigned ',' index_register '.' index_size ',' program_counter ')' | |
| '(' program_counter ',' offset_8bitsigned ',' index_register '.' index_size ')' | |
| '(' index_register '.' index_size ',' offset_8bitsigned ',' program_counter ')' | |
| '(' program_counter ',' index_register '.' index_size ',' offset_8bitsigned ')' | |
| '(' index_register '.' index_size ',' program_counter ',' offset_8bitsigned ')' | |
absolute_short: '(' expression_16bitsigned ')' '.' 'w' | |
absolute_long: '(' expression_24bit ')' '.' 'l' | |
absolute_automatic: expression | |
quick_3bit: '#' expression_3bitsigned | |
quick_4bit: '#' expression_4bitsigned | |
immediate_byte: '#' expression_8bitsigned | |
immediate_short: '#' expression_16bitsigned | |
immediate_long: '#' expression_32bit | |
ccr_value: R"[XNZVC]" | |
ccr_value_list: ccr_value | |
| ccr_value_list '|' ccr_value | |
ccr_expr: '#' expression_5bitunsigned | |
| ccr_values | |
register_selection: data_register_direct | |
| address_register_direct | |
| data_register_direct '-' data_register_direct | |
| data_register_direct '-' address_register_direct | |
| address_register_direct '-' address_register_direct | |
register_selection_list: register_selection | |
| register_selection_list '/' register_selection | |
// Address mode categories | |
register_direct: data_register_direct | |
| address_register_direct | |
register_indirect: address_register_indirect | |
| address_register_indirect_post_incr | |
| address_register_indirect_post_decr | |
| address_register_indirect_displacement | |
register_indirect_with_index: address_register_indirect_with_index | |
program_counter_indirect: program_counter_indirect_displacement | |
program_counter_indirect_with_index: program_counter_indirect_with_index | |
absolute_data: absolute_short | absolute_long | absolute_automatic | |
immediate: immediate_short | immediate_long | |
data: data_register_direct | |
| register_indirect | |
| register_indirect_with_index | |
| program_counter_indirect | |
| program_counter_indirect_with_index | |
| absolute_data | |
| immediate | |
memory: register_indirect | |
| register_indirect_with_index | |
| program_counter_indirect | |
| program_counter_indirect_with_index | |
| absolute_data | |
| immediate | |
control: address_register_indirect | |
| address_register_indirect_displacement | |
| register_indirect_with_index | |
| program_counter_indirect | |
| program_counter_indirect_with_index | |
| absolute_data | |
alterable: register_direct | |
| register_indirect | |
| register_indirect_with_index | |
data_alterable: data_register_direct | |
| register_indirect | |
| register_indirect_with_index | |
memory_alterable: register_indirect | |
| register_indirect_with_index | |
control_alterable: address_register_indirect | |
| address_register_indirect_displacement | |
| register_indirect_with_index |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment