N2T/vim/hackasm.vim

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"