78 lines
2.4 KiB
VimL
78 lines
2.4 KiB
VimL
if exists("b:current_syntax")
|
|
finish
|
|
endif
|
|
|
|
" Computation instructions
|
|
syntax match hackasmFunction "\v0"
|
|
syntax match hackasmFunction "\v1"
|
|
syntax match hackasmFunction "\vM"
|
|
syntax match hackasmFunction "\vD"
|
|
syntax match hackasmFunction "\vA"
|
|
syntax match hackasmFunction "\v-"
|
|
syntax match hackasmFunction "\v\+"
|
|
syntax match hackasmFunction "\v\|"
|
|
syntax match hackasmFunction "\v!"
|
|
syntax match hackasmFunction "\v\&"
|
|
|
|
" Jump instructions
|
|
syntax match hackasmConditional "\v;null"
|
|
syntax match hackasmConditional "\v;JGT"
|
|
syntax match hackasmConditional "\v;JEQ"
|
|
syntax match hackasmConditional "\v;JGE"
|
|
syntax match hackasmConditional "\v;JLT"
|
|
syntax match hackasmConditional "\v;JNE"
|
|
syntax match hackasmConditional "\v;JLE"
|
|
syntax match hackasmConditional "\v;JMP"
|
|
|
|
" Assignment instructions
|
|
syntax match hackasmOperator "\vnull\s*\="
|
|
syntax match hackasmOperator "\vM\s*\="
|
|
syntax match hackasmOperator "\vD\s*\="
|
|
syntax match hackasmOperator "\vMD\s*\="
|
|
syntax match hackasmOperator "\vA\s*\="
|
|
syntax match hackasmOperator "\vAM\s*\="
|
|
syntax match hackasmOperator "\vAD\s*\="
|
|
syntax match hackasmOperator "\vAMD\s*\="
|
|
|
|
syntax match hackasmNumber "\v\@[0-9]+"
|
|
|
|
syntax match hackasmIdentifier "\v\@[a-z][a-z_]*"
|
|
|
|
syntax match hackasmLabel "\v\@[A-Z][A-Za-z0-9:._]*"
|
|
syntax match hackasmLabel "\v\([A-Z][A-Za-z0-9:._]*\)"
|
|
|
|
syntax match hackasmError "\v\t+"
|
|
syntax match hackasmError "\v\([A-Z].*[^A-Za-z0-9:._].*\)"
|
|
|
|
syntax match hackasmError "\v\@[A-Z]+[^A-Za-z0-9:._].*"
|
|
syntax match hackasmError "\v\@[a-z]+[^a-za-z0-9:._].*"
|
|
|
|
" Computation instruction errors
|
|
syntax match hackasmError "\vM\s*\+\s*D"
|
|
syntax match hackasmError "\vA\s*\+\s*D"
|
|
" TODO Missing invalid computation instructions
|
|
|
|
syntax match hackasmKeyword "\v\@R[0-9]"
|
|
syntax match hackasmKeyword "\v\@R1[0-5]"
|
|
syntax match hackasmKeyword "\v\@SCREEN"
|
|
syntax match hackasmKeyword "\v\@KBD"
|
|
syntax match hackasmKeyword "\v\@SP"
|
|
syntax match hackasmKeyword "\v\@LCL"
|
|
syntax match hackasmKeyword "\v\@ARG"
|
|
syntax match hackasmKeyword "\v\@THIS"
|
|
syntax match hackasmKeyword "\v\@THAT"
|
|
|
|
syntax match hackasmComment "\v//.*$"
|
|
|
|
highlight link hackasmError Error
|
|
highlight link hackasmComment Comment
|
|
highlight link hackasmFunction Function
|
|
highlight link hackasmConditional Conditional
|
|
highlight link hackasmOperator Operator
|
|
highlight link hackasmKeyword Keyword
|
|
highlight link hackasmNumber Number
|
|
highlight link hackasmIdentifier Identifier
|
|
highlight link hackasmLabel Label
|
|
|
|
let b:current_syntax = "hackasm"
|