blob: 564d344cc8490a979325f00aa53281905ea7823e [file] [log] [blame]
Bram Moolenaar4b60a6c2013-11-14 05:48:46 +01001" Vim syntax file
2" Language: MIX (Donald Knuth's assembly language used in TAOCP)
3" Maintainer: Wu Yongwei <wuyongwei@gmail.com>
4" Filenames: *.mixal *.mix
Bram Moolenaardf980db2017-12-24 13:22:00 +01005" Last Change: 2017-11-26 15:21:36 +0800
Bram Moolenaar4b60a6c2013-11-14 05:48:46 +01006
7" Quit when a syntax file was already loaded
8if exists("b:current_syntax")
9 finish
10endif
11
12let s:cpo_save = &cpo
13set cpo&vim
14
15syn case ignore
16
17" Special processing of ALF directive: implementations vary whether quotation
18" marks are needed
Bram Moolenaardf980db2017-12-24 13:22:00 +010019syn match mixAlfParam #\s\{1,2\}"\?[^"]\{,5\}"\?# contains=mixString nextgroup=mixEndComment contained
Bram Moolenaar4b60a6c2013-11-14 05:48:46 +010020
21" Region for parameters
22syn match mixParam #[-+*/:=0-9a-z,()"]\+# contains=mixIdentifier,mixSpecial,mixNumber,mixString,mixLabel nextgroup=mixEndComment contained
23
24" Comment at the line end
25syn match mixEndComment ".*" contains=mixRegister contained
26
27" Identifier; must go before literals
28syn match mixIdentifier "[a-z0-9_]\+" contained
29
30" Literals
31syn match mixSpecial "[-+*/:=]" contained
32syn match mixNumber "[0-9]\+\>" contained
33syn region mixString start=+"+ skip=+\\"+ end=+"+ contained
34
35" Labels
36syn match mixLabel "^[a-z0-9_]\{,10\}\s\+" nextgroup=mixAlfSpecial,mixOpcode,mixDirective
37syn match mixLabel "[0-9][BF]" contained
38
39" Comments
40syn match mixComment "^\*.*" contains=mixRegister
41
42" Directives
43syn keyword mixDirective ORIG EQU CON END nextgroup=mixParam contained skipwhite
44syn keyword mixDirective ALF nextgroup=mixAlfParam contained
45
46" Opcodes
47syn keyword mixOpcode NOP HLT NUM CHAR FLOT FIX nextgroup=mixEndComment contained
48syn keyword mixOpcode FADD FSUB FMUL FDIV FCMP MOVE ADD SUB MUL DIV IOC IN OUT JRED JBUS JMP JSJ JOV JNOV JL JE JG JLE JNE JGE SLA SRA SLAX SRAX SLC SRC nextgroup=mixParam contained skipwhite
Bram Moolenaardf980db2017-12-24 13:22:00 +010049syn keyword mixOpcode SLB SRB JAE JAO JXE JXO nextgroup=mixParam contained skipwhite
Bram Moolenaar4b60a6c2013-11-14 05:48:46 +010050
51syn match mixOpcode "LD[AX1-6]N\?\>" nextgroup=mixParam contained skipwhite
52syn match mixOpcode "ST[AX1-6JZ]\>" nextgroup=mixParam contained skipwhite
53syn match mixOpcode "EN[TN][AX1-6]\>" nextgroup=mixParam contained skipwhite
54syn match mixOpcode "INC[AX1-6]\>" nextgroup=mixParam contained skipwhite
55syn match mixOpcode "DEC[AX1-6]\>" nextgroup=mixParam contained skipwhite
56syn match mixOpcode "CMP[AX1-6]\>" nextgroup=mixParam contained skipwhite
57syn match mixOpcode "J[AX1-6]N\?[NZP]\>" nextgroup=mixParam contained skipwhite
58
59" Switch back to being case sensitive
60syn case match
61
Bram Moolenaardf980db2017-12-24 13:22:00 +010062" Registers (only to be used in comments now)
Bram Moolenaar4b60a6c2013-11-14 05:48:46 +010063syn keyword mixRegister rA rX rI1 rI2 rI3 rI4 rI5 rI6 rJ contained
64
65" The default highlighting
66hi def link mixRegister Special
67hi def link mixLabel Define
68hi def link mixComment Comment
69hi def link mixEndComment Comment
70hi def link mixDirective Keyword
71hi def link mixOpcode Keyword
72
73hi def link mixSpecial Special
74hi def link mixNumber Number
75hi def link mixString String
76hi def link mixAlfParam String
77hi def link mixIdentifier Identifier
78
79let b:current_syntax = "mix"
80
81let &cpo = s:cpo_save
82unlet s:cpo_save
83
84" vim: ts=8