summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOxore <oxore@protonmail.com>2023-06-25 23:14:44 +0300
committerOxore <oxore@protonmail.com>2023-06-25 23:14:44 +0300
commitb4f2fd813384a918b617e17aa394f72f8779a0a0 (patch)
tree5dc6bec27f6b8c2657c3f4cbdcbebe831f458cd8
parente882f7f28ae38ad6b42f8d558d30a0bafd8e5b32 (diff)
Add some notes and grammar
-rw-r--r--grammar.wsn48
-rw-r--r--notes.txt20
2 files changed, 68 insertions, 0 deletions
diff --git a/grammar.wsn b/grammar.wsn
new file mode 100644
index 0000000..23aca49
--- /dev/null
+++ b/grammar.wsn
@@ -0,0 +1,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" .
diff --git a/notes.txt b/notes.txt
new file mode 100644
index 0000000..b3b2b48
--- /dev/null
+++ b/notes.txt
@@ -0,0 +1,20 @@
+PC register can be specified as "PC" or "pc", but "Pc" and "pC" forms are not
+allowed.
+An and Dn register can be specified with capital or small letter no problem.
+
+"-" - Expression or -(An)
+"-(" - Expression or -(An)
+"--" - Expression
+"-(a1" - -(An), only ')' expected further
+"-(a1)" - -(An), done
+
+"#" - Immediate expression, no registers allowed, no size specifiers allowed
+
+"(" - Addr Expression, (An), (An)+, (d16,An), (d16,pc), (d8,An,Xi) or (d8,pc,Xi)
+"(a1" - (An), (An)+, (d16,An) or (d8,An,Xi)
+"(a1," - (An), (An)+, (d16,An) or (d8,An,Xi)
+"(d1" - (d8,An,Xi) or (d8,pc,Xi)
+"(d1," - (d8,An,Xi) or (d8,pc,Xi)
+"(pc" - (d16,pc) or (d8,pc,Xi)
+"(a1)" - (An), (An)+
+"(a1)+" - (An)+, done