a.out object file output (mostly).
[m68k-assembler.git] / m68k-grammar.lisp
blobe6bac73fe52ceb6cffeb006481d9478a4313c850
2 ;;; m68k asm grammar
4 (in-package :m68k-assembler)
6 (defparameter *m68k-asm-grammar*
7 '(;; OPERAND
8 line ((label)
9 (label operation)
10 (label operation operands)
11 (operation)
12 (operation operands))
13 label ((symbol) (symbol colon))
15 operands ((operand)
16 (operands comma operand))
18 operation ((opcode)
19 (pseudo-op))
21 ;; ADDRESSING MODES
23 operand ((absolute)
24 (indirect)
25 (immediate)
26 (register-list))
28 absolute ((expression))
30 indirect ((displacement-indirect)
31 (postincrement-indirect)
32 (predecrement-indirect)
33 (indexed-indirect))
35 displacement-indirect ((expression open register close)
36 (open register close))
37 postincrement-indirect ((open register close +))
38 predecrement-indirect ((- open register close))
39 indexed-indirect ((expression open register comma register close)
40 (open register comma register close))
42 immediate ((hash expression))
44 ;; we use register-list also for register-direct, and sort out the
45 ;; difference at a semantic level.
46 register-list ((register)
47 (register - register)
48 (register-list / register-list))
50 ;; EXPRESSIONS
52 expression ((term2)
53 (expression adding-operator term2))
54 adding-operator ((+) (-))
56 term2 ((term)
57 (term2 bitwise-operator term))
58 bitwise-operator ((<<) (>>) (^) (or) (&))
60 term ((factor)
61 (term multiplying-operator factor))
62 multiplying-operator ((*) (/))
64 factor ((value)
65 (unary-operator value)
66 (open expression close))
67 unary-operator ((~) (-))
69 value ((constant)
70 (symbol))))