xref: /vim-8.2.3635/runtime/syntax/b.vim (revision f37506f6)
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