1" Vim syntax file 2" Language: GNU Assembler 3" Maintainer: Erik Wognsen <[email protected]> 4" Previous maintainer: 5" Kevin Dahlhausen <[email protected]> 6" Last Change: 2014 Feb 04 7 8" Thanks to Ori Avtalion for feedback on the comment markers! 9 10" quit when a syntax file was already loaded 11if exists("b:current_syntax") 12 finish 13endif 14 15let s:cpo_save = &cpo 16set cpo&vim 17 18syn case ignore 19 20" storage types 21syn match asmType "\.long" 22syn match asmType "\.ascii" 23syn match asmType "\.asciz" 24syn match asmType "\.byte" 25syn match asmType "\.double" 26syn match asmType "\.float" 27syn match asmType "\.hword" 28syn match asmType "\.int" 29syn match asmType "\.octa" 30syn match asmType "\.quad" 31syn match asmType "\.short" 32syn match asmType "\.single" 33syn match asmType "\.space" 34syn match asmType "\.string" 35syn match asmType "\.word" 36 37syn match asmLabel "[a-z_][a-z0-9_]*:"he=e-1 38syn match asmIdentifier "[a-z_][a-z0-9_]*" 39 40" Various #'s as defined by GAS ref manual sec 3.6.2.1 41" Technically, the first decNumber def is actually octal, 42" since the value of 0-7 octal is the same as 0-7 decimal, 43" I (Kevin) prefer to map it as decimal: 44syn match decNumber "0\+[1-7]\=[\t\n$,; ]" 45syn match decNumber "[1-9]\d*" 46syn match octNumber "0[0-7][0-7]\+" 47syn match hexNumber "0[xX][0-9a-fA-F]\+" 48syn match binNumber "0[bB][0-1]*" 49 50syn keyword asmTodo contained TODO 51 52 53" GAS supports one type of multi line comments: 54syn region asmComment start="/\*" end="\*/" contains=asmTodo 55 56" GAS (undocumentedly?) supports C++ style comments. Unlike in C/C++ however, 57" a backslash ending a C++ style comment does not extend the comment to the 58" next line (hence the syntax region does not define 'skip="\\$"') 59syn region asmComment start="//" end="$" keepend contains=asmTodo 60 61" Line comment characters depend on the target architecture and command line 62" options and some comments may double as logical line number directives or 63" preprocessor commands. This situation is described at 64" http://sourceware.org/binutils/docs-2.22/as/Comments.html 65" Some line comment characters have other meanings for other targets. For 66" example, .type directives may use the `@' character which is also an ARM 67" comment marker. 68" As a compromise to accommodate what I arbitrarily assume to be the most 69" frequently used features of the most popular architectures (and also the 70" non-GNU assembly languages that use this syntax file because their asm files 71" are also named *.asm), the following are used as line comment characters: 72syn match asmComment "[#;!|].*" contains=asmTodo 73 74" Side effects of this include: 75" - When `;' is used to separate statements on the same line (many targets 76" support this), all statements except the first get highlighted as 77" comments. As a remedy, remove `;' from the above. 78" - ARM comments are not highlighted correctly. For ARM, uncomment the 79" following two lines and comment the one above. 80"syn match asmComment "@.*" contains=asmTodo 81"syn match asmComment "^#.*" contains=asmTodo 82 83" Advanced users of specific architectures will probably want to change the 84" comment highlighting or use a specific, more comprehensive syntax file. 85 86syn match asmInclude "\.include" 87syn match asmCond "\.if" 88syn match asmCond "\.else" 89syn match asmCond "\.endif" 90syn match asmMacro "\.macro" 91syn match asmMacro "\.endm" 92 93" Assembler directives start with a '.' and may contain upper case (e.g., 94" .ABORT), numbers (e.g., .p2align), dash (e.g., .app-file) and underscore in 95" CFI directives (e.g., .cfi_startproc). This will also match labels starting 96" with '.', including the GCC auto-generated '.L' labels. 97syn match asmDirective "\.[A-Za-z][0-9A-Za-z-_]*" 98 99 100syn case match 101 102" Define the default highlighting. 103" Only when an item doesn't have highlighting yet 104 105" The default methods for highlighting. Can be overridden later 106hi def link asmSection Special 107hi def link asmLabel Label 108hi def link asmComment Comment 109hi def link asmTodo Todo 110hi def link asmDirective Statement 111 112hi def link asmInclude Include 113hi def link asmCond PreCondit 114hi def link asmMacro Macro 115 116hi def link hexNumber Number 117hi def link decNumber Number 118hi def link octNumber Number 119hi def link binNumber Number 120 121hi def link asmIdentifier Identifier 122hi def link asmType Type 123 124 125let b:current_syntax = "asm" 126 127let &cpo = s:cpo_save 128unlet s:cpo_save 129 130" vim: ts=8 131