1071d4279SBram Moolenaar" Vim syntax file 2071d4279SBram Moolenaar" Language: B (A Formal Method with refinement and mathematical proof) 33577c6faSBram Moolenaar" Maintainer: Mathieu Clabaut <[email protected]> 43577c6faSBram Moolenaar" Contributor: Csaba Hoch 53577c6faSBram Moolenaar" LastChange: 8 Dec 2007 6071d4279SBram Moolenaar 7071d4279SBram Moolenaar 889bcfda6SBram Moolenaar" quit when a syntax file was already loaded 989bcfda6SBram Moolenaarif exists("b:current_syntax") 10071d4279SBram Moolenaar finish 11071d4279SBram Moolenaarendif 12071d4279SBram Moolenaar 13071d4279SBram Moolenaar 14071d4279SBram Moolenaar" A bunch of useful B keywords 153577c6faSBram Moolenaarsyn 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 16071d4279SBram Moolenaarsyn keyword bLabel CASE IN EITHER OR CHOICE DO OF 17071d4279SBram Moolenaarsyn keyword bConditional IF ELSE SELECT ELSIF THEN WHEN 18071d4279SBram Moolenaarsyn keyword bRepeat WHILE FOR 19071d4279SBram Moolenaarsyn 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 20071d4279SBram Moolenaarsyn keyword bKeywords LET VAR BE IN BEGIN END POW POW1 FIN FIN1 PRE SIGMA STRING UNION IS ANY WHERE 21071d4279SBram Moolenaar 22071d4279SBram Moolenaarsyn keyword bBoolean TRUE FALSE bfalse btrue 23071d4279SBram Moolenaarsyn keyword bConstant PI MAXINT MININT User_Pass PatchProver PatchProverH0 PatchProverB0 FLAT ARI DED SUB RES 24071d4279SBram Moolenaarsyn 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 25071d4279SBram Moolenaar 26071d4279SBram Moolenaarsyn keyword bLogic or not 273577c6faSBram Moolenaarsyn match bLogic "\(!\|#\|%\|&\|+->>\|+->\|-->>\|->>\|-->\|->\|/:\|/<:\|/<<:\|/=\|/\\\|/|\\\|::\|:\|;:\|<+\|<->\|<--\|<-\|<:\|<<:\|<<|\|<=>\|<|\|==\|=>\|>+>>\|>->\|>+>\|||\||->\)" 283577c6faSBram Moolenaarsyn match bNothing /:=/ 29071d4279SBram Moolenaar 30071d4279SBram Moolenaarsyn keyword cTodo contained TODO FIXME XXX 31071d4279SBram Moolenaar 32071d4279SBram Moolenaar" String and Character constants 33071d4279SBram Moolenaar" Highlight special characters (those which have a backslash) differently 34071d4279SBram Moolenaarsyn match bSpecial contained "\\[0-7][0-7][0-7]\=\|\\." 35071d4279SBram Moolenaarsyn region bString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=bSpecial 36071d4279SBram Moolenaarsyn match bCharacter "'[^\\]'" 37071d4279SBram Moolenaarsyn match bSpecialCharacter "'\\.'" 38071d4279SBram Moolenaarsyn match bSpecialCharacter "'\\[0-7][0-7]'" 39071d4279SBram Moolenaarsyn match bSpecialCharacter "'\\[0-7][0-7][0-7]'" 40071d4279SBram Moolenaar 41071d4279SBram Moolenaar"catch errors caused by wrong parenthesis 42071d4279SBram Moolenaarsyn region bParen transparent start='(' end=')' contains=ALLBUT,bParenError,bIncluded,bSpecial,bTodo,bUserLabel,bBitField 43071d4279SBram Moolenaarsyn match bParenError ")" 44071d4279SBram Moolenaarsyn match bInParen contained "[{}]" 45071d4279SBram Moolenaar 46071d4279SBram Moolenaar"integer number, or floating point number without a dot and with "f". 47071d4279SBram Moolenaarsyn case ignore 48071d4279SBram Moolenaarsyn match bNumber "\<[0-9]\+\>" 49071d4279SBram Moolenaar"syn match bIdentifier "\<[a-z_][a-z0-9_]*\>" 50071d4279SBram Moolenaarsyn case match 51071d4279SBram Moolenaar 52071d4279SBram Moolenaar syn region bComment start="/\*" end="\*/" contains=bTodo 53071d4279SBram Moolenaar syn match bComment "//.*" contains=bTodo 54071d4279SBram Moolenaarsyntax match bCommentError "\*/" 55071d4279SBram Moolenaar 56071d4279SBram Moolenaarsyn keyword bType INT INTEGER BOOL NAT NATURAL NAT1 NATURAL1 57071d4279SBram Moolenaar 58071d4279SBram Moolenaarsyn region bPreCondit start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=bComment,bString,bCharacter,bNumber,bCommentError 59071d4279SBram Moolenaarsyn region bIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+ 60071d4279SBram Moolenaarsyn match bIncluded contained "<[^>]*>" 61071d4279SBram Moolenaarsyn match bInclude "^\s*#\s*include\>\s*["<]" contains=bIncluded 62071d4279SBram Moolenaar 63071d4279SBram Moolenaarsyn region bDefine start="^\s*#\s*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,bPreCondit,bIncluded,bInclude,bDefine,bInParen 64071d4279SBram Moolenaarsyn region bPreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,bPreCondit,bIncluded,bInclude,bDefine,bInParen 65071d4279SBram Moolenaar 66071d4279SBram Moolenaarsyn sync ccomment bComment minlines=10 67071d4279SBram Moolenaar 68071d4279SBram Moolenaar" Define the default highlighting. 6989bcfda6SBram Moolenaar" Only when an item doesn't have highlighting yet 70071d4279SBram Moolenaar 71071d4279SBram Moolenaar 72071d4279SBram Moolenaar" The default methods for highlighting. Can be overridden later 73*f37506f6SBram Moolenaarhi def link bLabel Label 74*f37506f6SBram Moolenaarhi def link bUserLabel Label 75*f37506f6SBram Moolenaarhi def link bConditional Conditional 76*f37506f6SBram Moolenaarhi def link bRepeat Repeat 77*f37506f6SBram Moolenaarhi def link bLogic Special 78*f37506f6SBram Moolenaarhi def link bCharacter Character 79*f37506f6SBram Moolenaarhi def link bSpecialCharacter bSpecial 80*f37506f6SBram Moolenaarhi def link bNumber Number 81*f37506f6SBram Moolenaarhi def link bFloat Float 82*f37506f6SBram Moolenaarhi def link bOctalError bError 83*f37506f6SBram Moolenaarhi def link bParenError bError 84*f37506f6SBram Moolenaar" hi def link bInParen bError 85*f37506f6SBram Moolenaarhi def link bCommentError bError 86*f37506f6SBram Moolenaarhi def link bBoolean Identifier 87*f37506f6SBram Moolenaarhi def link bConstant Identifier 88*f37506f6SBram Moolenaarhi def link bGuard Identifier 89*f37506f6SBram Moolenaarhi def link bOperator Operator 90*f37506f6SBram Moolenaarhi def link bKeywords Operator 91*f37506f6SBram Moolenaarhi def link bOps Identifier 92*f37506f6SBram Moolenaarhi def link bStructure Structure 93*f37506f6SBram Moolenaarhi def link bStorageClass StorageClass 94*f37506f6SBram Moolenaarhi def link bInclude Include 95*f37506f6SBram Moolenaarhi def link bPreProc PreProc 96*f37506f6SBram Moolenaarhi def link bDefine Macro 97*f37506f6SBram Moolenaarhi def link bIncluded bString 98*f37506f6SBram Moolenaarhi def link bError Error 99*f37506f6SBram Moolenaarhi def link bStatement Statement 100*f37506f6SBram Moolenaarhi def link bPreCondit PreCondit 101*f37506f6SBram Moolenaarhi def link bType Type 102*f37506f6SBram Moolenaarhi def link bCommentError bError 103*f37506f6SBram Moolenaarhi def link bCommentString bString 104*f37506f6SBram Moolenaarhi def link bComment2String bString 105*f37506f6SBram Moolenaarhi def link bCommentSkip bComment 106*f37506f6SBram Moolenaarhi def link bString String 107*f37506f6SBram Moolenaarhi def link bComment Comment 108*f37506f6SBram Moolenaarhi def link bSpecial SpecialChar 109*f37506f6SBram Moolenaarhi def link bTodo Todo 110071d4279SBram Moolenaar"hi link bIdentifier Identifier 111071d4279SBram Moolenaar 1129964e468SBram Moolenaarlet b:current_syntax = "b" 113071d4279SBram Moolenaar 114071d4279SBram Moolenaar" vim: ts=8 115