Wirth syntax notation (WSN) of Mya language:
PROGRAM = { DECLARATION | COMMAND } .
DECLARATION = BITFIELD_DECLARATION
| REGISTER_DECLARATION
| INSTRUCTION_DECLARATION .
BITFIELD_DECLARATION = "bitfield" BITFIELD_NAME SIZE_SPEC [ "{"
BITFIELD_BODY "}" ] .
BITFIELD_NAME = UPPERCASE_LETTER { ALPHACHARACTER } .
BITFIELD_BODY = BITFIELD_FIELD_DECLARATION {
BITFIELD_FIELD_DECLARATION } .
BITFIELD_FIELD_DECLARATION = IDENTIFIER SIZE_SPEC .
BITFIELD_SPEC = BITFIELD_NAME "{" ( EXPRESSION |
BITFIELD_SPEC_FIELD { "," BITFIELD_SPEC_FIELD } ) "}" .
BITFIELD_SPEC_FIELD = IDENTIFIER "=" EXPRESSION [ "," ] .
REGISTER_DECLARATION = "register" IDENTIFIER SIZE_SPEC "="
BITFIELD_SPEC .
INSTRUCTION_DECLARATION = "inst" IDENTIFIER SIZE_SPEC "("
INSTRUCTION_ARGLIST ")" "{" INSTRUCTION_SPEC "}" .
INSTRUCTION_ARGLIST = INSTRUCTION_ARG { "," INSTRUCTION_ARG } .
INSTRUCTION_ARG = IDENTIFIER ":" TYPE_SPEC .
INSTRUCTION_SPEC = INSTRUCTION_SPEC_FIELD { ","
INSTRUCTION_SPEC_FIELD } .
INSTRUCTION_SPEC_FIELD = IDENTIFIER "=" BITFIELD_SPEC [ "," ] .
TYPE_SPEC = TYPE_NAME SIZE_SPEC .
TYPE_NAME = "register" | "immediate" .
SIZE_SPEC = "[" EXPRESSION "]" .
COMMAND = COMMAND_STATEMENT ";" .
COMMAND_STATEMENT = SET_COMMAND | INCLUDE_COMMAND .
SET_COMMAND = "set" IDENTIFIER "=" EXPRESSION .
INCLUDE_COMMAND = "include" STRING .
IDENTIFIER = LETTER { ALPHACHARACTER } .
EXPRESSION = IDENTIFIER
| NUMBER
| "(" EXPRESSION ")"
| EXPRESSION OPERATOR EXPRESSION .
OPERATOR = "-" | "+" | "/" | "*" | "|" | "&" | "^" | "~" | "<<" |
">>" .
UPPERCASE_LETTER = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" |
"I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" |
"T" | "U" | "V" | "W" | "X" | "Y" | "Z" .
LOWERCASE_LETTER = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" |
"i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" |
"t" | "u" | "v" | "w" | "x" | "y" | "z" .
LETTER = UPPERCASE_LETTER | LOWERCASE_LETTER .
ALPHACHARACTER = LETTER | DECIMAL_DIGIT | "_" .
NUMBER = DECIMAL_NUMBER | HEXADECIMAL_NUMBER | OCTAL_NUMBER |
BINARY_NUMBER .
DECIMAL_NUMBER = DECIMAL_DIGIT { DECIMAL_DIGIT } .
HEXADECIMAL_NUMBER = "0x" HEXADECIMAL_DIGIT { HEXADECIMAL_DIGIT } .
OCTAL_NUMBER = "0o" OCTAL_DIGIT { OCTAL_DIGIT } .
BINARY_NUMBER = "0b" BINARY_DIGIT { BINARY_DIGIT } .
DECIMAL_DIGIT = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" |
"8" | "9" .
HEXADECIMAL_DIGIT = DECIMAL_DIGIT
| "a" | "b" | "c" | "d" | "e" | "f"
| "A" | "B" | "C" | "D" | "E" | "F" .
STRING = """" { ANY_CHAR } """" .