blob: b470ab9ef376883aa58523ca14f6a33798b9764f [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: B (A Formal Method with refinement and mathematical proof)
Bram Moolenaar3577c6f2008-06-24 21:16:56 +00003" Maintainer: Mathieu Clabaut <mathieu.clabaut@gmail.com>
4" Contributor: Csaba Hoch
5" LastChange: 8 Dec 2007
Bram Moolenaar071d4272004-06-13 20:20:40 +00006
7
8" For version 5.x: Clear all syntax items
9" For version 6.x: Quit when a syntax file was already loaded
10if version < 600
11 syntax clear
12elseif exists("b:current_syntax")
13 finish
14endif
15
16
17" A bunch of useful B keywords
Bram Moolenaar3577c6f2008-06-24 21:16:56 +000018syn 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
Bram Moolenaar071d4272004-06-13 20:20:40 +000019syn keyword bLabel CASE IN EITHER OR CHOICE DO OF
20syn keyword bConditional IF ELSE SELECT ELSIF THEN WHEN
21syn keyword bRepeat WHILE FOR
22syn 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
23syn keyword bKeywords LET VAR BE IN BEGIN END POW POW1 FIN FIN1 PRE SIGMA STRING UNION IS ANY WHERE
Bram Moolenaar071d4272004-06-13 20:20:40 +000024
25syn keyword bBoolean TRUE FALSE bfalse btrue
26syn keyword bConstant PI MAXINT MININT User_Pass PatchProver PatchProverH0 PatchProverB0 FLAT ARI DED SUB RES
27syn 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
28
29syn keyword bLogic or not
Bram Moolenaar3577c6f2008-06-24 21:16:56 +000030syn match bLogic "\(!\|#\|%\|&\|+->>\|+->\|-->>\|->>\|-->\|->\|/:\|/<:\|/<<:\|/=\|/\\\|/|\\\|::\|:\|;:\|<+\|<->\|<--\|<-\|<:\|<<:\|<<|\|<=>\|<|\|==\|=>\|>+>>\|>->\|>+>\|||\||->\)"
31syn match bNothing /:=/
Bram Moolenaar071d4272004-06-13 20:20:40 +000032
33syn keyword cTodo contained TODO FIXME XXX
34
35" String and Character constants
36" Highlight special characters (those which have a backslash) differently
37syn match bSpecial contained "\\[0-7][0-7][0-7]\=\|\\."
38syn region bString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=bSpecial
39syn match bCharacter "'[^\\]'"
40syn match bSpecialCharacter "'\\.'"
41syn match bSpecialCharacter "'\\[0-7][0-7]'"
42syn match bSpecialCharacter "'\\[0-7][0-7][0-7]'"
43
44"catch errors caused by wrong parenthesis
45syn region bParen transparent start='(' end=')' contains=ALLBUT,bParenError,bIncluded,bSpecial,bTodo,bUserLabel,bBitField
46syn match bParenError ")"
47syn match bInParen contained "[{}]"
48
49"integer number, or floating point number without a dot and with "f".
50syn case ignore
51syn match bNumber "\<[0-9]\+\>"
52"syn match bIdentifier "\<[a-z_][a-z0-9_]*\>"
53syn case match
54
Bram Moolenaar071d4272004-06-13 20:20:40 +000055 syn region bComment start="/\*" end="\*/" contains=bTodo
Bram Moolenaar071d4272004-06-13 20:20:40 +000056 syn match bComment "//.*" contains=bTodo
Bram Moolenaar071d4272004-06-13 20:20:40 +000057syntax match bCommentError "\*/"
58
59syn keyword bType INT INTEGER BOOL NAT NATURAL NAT1 NATURAL1
60
61syn region bPreCondit start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=bComment,bString,bCharacter,bNumber,bCommentError
62syn region bIncluded contained start=+"+ skip=+\\\\\|\\"+ end=+"+
63syn match bIncluded contained "<[^>]*>"
64syn match bInclude "^\s*#\s*include\>\s*["<]" contains=bIncluded
65
66syn region bDefine start="^\s*#\s*\(define\>\|undef\>\)" skip="\\$" end="$" contains=ALLBUT,bPreCondit,bIncluded,bInclude,bDefine,bInParen
67syn region bPreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" contains=ALLBUT,bPreCondit,bIncluded,bInclude,bDefine,bInParen
68
Bram Moolenaar071d4272004-06-13 20:20:40 +000069syn sync ccomment bComment minlines=10
70
71" Define the default highlighting.
72" For version 5.7 and earlier: only when not done already
73" For version 5.8 and later: only when an item doesn't have highlighting yet
74
75if version >= 508 || !exists("did_b_syntax_inits")
76 if version < 508
77 let did_b_syntax_inits = 1
78 command -nargs=+ HiLink hi link <args>
79 else
80 command -nargs=+ HiLink hi def link <args>
81 endif
82
83 " The default methods for highlighting. Can be overridden later
84 HiLink bLabel Label
85 HiLink bUserLabel Label
86 HiLink bConditional Conditional
87 HiLink bRepeat Repeat
88 HiLink bLogic Special
89 HiLink bCharacter Character
90 HiLink bSpecialCharacter bSpecial
91 HiLink bNumber Number
92 HiLink bFloat Float
93 HiLink bOctalError bError
94 HiLink bParenError bError
95" HiLink bInParen bError
96 HiLink bCommentError bError
97 HiLink bBoolean Identifier
98 HiLink bConstant Identifier
99 HiLink bGuard Identifier
100 HiLink bOperator Operator
101 HiLink bKeywords Operator
102 HiLink bOps Identifier
103 HiLink bStructure Structure
104 HiLink bStorageClass StorageClass
105 HiLink bInclude Include
106 HiLink bPreProc PreProc
107 HiLink bDefine Macro
108 HiLink bIncluded bString
109 HiLink bError Error
110 HiLink bStatement Statement
111 HiLink bPreCondit PreCondit
112 HiLink bType Type
113 HiLink bCommentError bError
114 HiLink bCommentString bString
115 HiLink bComment2String bString
116 HiLink bCommentSkip bComment
117 HiLink bString String
118 HiLink bComment Comment
119 HiLink bSpecial SpecialChar
120 HiLink bTodo Todo
121 "hi link bIdentifier Identifier
122 delcommand HiLink
123endif
124
Bram Moolenaar9964e462007-05-05 17:54:07 +0000125let b:current_syntax = "b"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000126
127" vim: ts=8