summaryrefslogtreecommitdiff
path: root/grammar.wsn
blob: 23aca49c9721d7b2b42ffa9b45947f9cccd42731 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
program        = { statement } .
statement      = ( directive | label | instr | assignment | comment ) nl .
comment        = ( ";" | "*" ) { CHAR } .
label          = ID ":" .
directive      = [ label ] DOT_ID  { DOT_ID | ID | number } [ comment ] .
instr          = [ label ] mnemonic [ "." insn_size_spec ] [ arg [ "," arg ] ] [ comment ] .
assignment     = [ label ] ID ( "=" | "==" ) expr [ comment ] .
arg            = dn | an | "-" an_addr | an_addr [ "+" ] | an_pc_d8 | an_pc_d16
               | addr .
addr           = expr [ "." addr_size_spec ] .
an_pc_d8       = expr "(" subarg "," subarg ")"
               | "(" expr "," subarg "," subarg ")" .
an_pc_d16      = expr "(" subarg ")" | "(" subarg "," subarg ")" .
an_addr        = "(" an ")" .
subarg         = expr | an | pc | d8
expr           = { unary_oparator } ( "(" expr ")" | expr operator expr | ID | number ) .
operator       = ( "+" | "-" | "*" | "/" | "&" | "|" ) .
unary          = ( "~" | "-" ) .
pc             = ( "pc" | "PC" ) .
dn             = ( "d" | "D" ) OCT .
an             = ( "a" | "A" ) OCT .
number         = ( NUMHEX | NUMDEC | NUMOCT ) .
comment        = ( NUMHEX | NUMDEC | NUMOCT ) .
nl             = "\n" | "\r\n" | "\r";
insn_size_spec = "s" | "S" | addr_size_spec .
addr_size_spec = "b" | "B" | "w" | "W" | "l" | "L" .
NUMHEX         = ( "$" | "0" ("x" | "X") ) HEX { HEX } .
NUMDEC         = "0" | DEC { DEC } .
NUMOCT         = ( "@" | "0" ) OCT { OCT } .
STRING         = """" { STR_CHAR } """" .
DOT_ID         = "." ID .
ID             = (ALPHA | "_" ) { ALPHANUM | "_" } .

STR_CHAR  = "\n" | "\r" | CHAR .
CHAR      = "\t" | " " | "!" | "#" | "$" | "%" | "&" | "'" | "(" | ")" | "*"
          | "+" | "," | "." | "/" | ":" | ";" | "<" | "=" | ">" | "?" | "@"
          | "[" | "\" | "]" | "%" | "`" | "{" | "|" | "}" | "~" | "\"""
          | ALPHANUM .
ALPHANUM  = DEC | ALPHA .
HEX = DEC | "a" | "A" | "b" | "B" | "c" | "C" | "d" | "D" | "e" | "E" | "f"
    | "F" .
DEC = OCT | "8" | "9" .
OCT = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7".
ALPHA = "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" | "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" .