1" Vim syntax file 2" Language: B (A Formal Method with refinement and mathematical proof) 3" Maintainer: Mathieu Clabaut <[email protected]> 4" Contributor: Csaba Hoch 5" LastChange: 8 Dec 2007 6 7 8" quit when a syntax file was already loaded 9if exists("b:current_syntax") 10 finish 11endif 12 13 14" A bunch of useful B keywords 15syn keyword bStatement MACHINE MODEL SEES OPERATIONS INCLUDES DEFINITIONS CONSTRAINTS CONSTANTS VARIABLES CONCRETE_CONSTANTS CONCRETE_VARIABLES ABSTRACT_CONSTANTS ABSTRACT_VARIABLES HIDDEN_CONSTANTS HIDDEN_VARIABLES ASSERT ASSERTIONS EXTENDS IMPLEMENTATION REFINEMENT IMPORTS USES INITIALISATION INVARIANT PROMOTES PROPERTIES REFINES SETS VALUES VARIANT VISIBLE_CONSTANTS VISIBLE_VARIABLES THEORY XLS THEOREMS LOCAL_OPERATIONS 16syn keyword bLabel CASE IN EITHER OR CHOICE DO OF 17syn keyword bConditional IF ELSE SELECT ELSIF THEN WHEN 18syn keyword bRepeat WHILE FOR 19syn keyword bOps bool card conc closure closure1 dom first fnc front not or id inter iseq iseq1 iterate last max min mod perm pred prj1 prj2 ran rel rev seq seq1 size skip succ tail union 20syn keyword bKeywords LET VAR BE IN BEGIN END POW POW1 FIN FIN1 PRE SIGMA STRING UNION IS ANY WHERE 21 22syn keyword bBoolean TRUE FALSE bfalse btrue 23syn keyword bConstant PI MAXINT MININT User_Pass PatchProver PatchProverH0 PatchProverB0 FLAT ARI DED SUB RES 24syn keyword bGuard binhyp band bnot bguard bsearch bflat bfresh bguardi bget bgethyp barith bgetresult bresult bgoal bmatch bmodr bnewv bnum btest bpattern bprintf bwritef bsubfrm bvrb blvar bcall bappend bclose 25 26syn keyword bLogic or not 27syn match bLogic "\(!\|#\|%\|&\|+->>\|+->\|-->>\|->>\|-->\|->\|/:\|/<:\|/<<:\|/=\|/\\\|/|\\\|::\|:\|;:\|<+\|<->\|<--\|<-\|<:\|<<:\|<<|\|<=>\|<|\|==\|=>\|>+>>\|>->\|>+>\|||\||->\)" 28syn match bNothing /:=/ 29 30syn keyword cTodo contained TODO FIXME XXX 31 32" String and Character constants 33" Highlight special characters (those which have a backslash) differently 34syn match bSpecial contained "\\[0-7][0-7][0-7]\=\|\\." 35syn region bString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=bSpecial 36syn match bCharacter "'[^\\]'" 37syn match bSpecialCharacter "'\\.'" 38syn match bSpecialCharacter "'\\[0-7][0-7]'" 39syn match bSpecialCharacter "'\\[0-7][0-7][0-7]'" 40 41"catch errors caused by wrong parenthesis 42syn region bParen transparent start='(' end=')' contains=ALLBUT,bParenError,bIncluded,bSpecial,bTodo,bUserLabel,bBitField 43syn match bParenError ")" 44syn match bInParen contained "[{}]" 45 46"integer number, or floating point number without a dot and with "f". 47syn case ignore 48syn match bNumber "\<[0-9]\+\>" 49"syn match bIdentifier "\<[a-z_][a-z0-9_]*\>" 50syn case match 51 52 syn region bComment start="/\*" end="\*/" contains=bTodo 53 syn match bComment "//.*" contains=bTodo 54syntax match bCommentError "\*/" 55 56syn keyword bType INT INTEGER BOOL NAT NATURAL NAT1 NATURAL1 57 58syn region bPreCondit start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=bComment,bString,bCharacter,bNumber,bCommentError 59syn region bIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+ 60syn match bIncluded contained "<[^>]*>" 61syn match bInclude "^\s*#\s*include\>\s*["<]" contains=bIncluded 62 63syn region bDefine start="^\s*#\s*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,bPreCondit,bIncluded,bInclude,bDefine,bInParen 64syn region bPreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,bPreCondit,bIncluded,bInclude,bDefine,bInParen 65 66syn sync ccomment bComment minlines=10 67 68" Define the default highlighting. 69" Only when an item doesn't have highlighting yet 70 71command -nargs=+ HiLink hi def link <args> 72 73" The default methods for highlighting. Can be overridden later 74HiLink bLabel Label 75HiLink bUserLabel Label 76HiLink bConditional Conditional 77HiLink bRepeat Repeat 78HiLink bLogic Special 79HiLink bCharacter Character 80HiLink bSpecialCharacter bSpecial 81HiLink bNumber Number 82HiLink bFloat Float 83HiLink bOctalError bError 84HiLink bParenError bError 85" HiLink bInParen bError 86HiLink bCommentError bError 87HiLink bBoolean Identifier 88HiLink bConstant Identifier 89HiLink bGuard Identifier 90HiLink bOperator Operator 91HiLink bKeywords Operator 92HiLink bOps Identifier 93HiLink bStructure Structure 94HiLink bStorageClass StorageClass 95HiLink bInclude Include 96HiLink bPreProc PreProc 97HiLink bDefine Macro 98HiLink bIncluded bString 99HiLink bError Error 100HiLink bStatement Statement 101HiLink bPreCondit PreCondit 102HiLink bType Type 103HiLink bCommentError bError 104HiLink bCommentString bString 105HiLink bComment2String bString 106HiLink bCommentSkip bComment 107HiLink bString String 108HiLink bComment Comment 109HiLink bSpecial SpecialChar 110HiLink bTodo Todo 111"hi link bIdentifier Identifier 112delcommand HiLink 113 114let b:current_syntax = "b" 115 116" vim: ts=8 117