1" Vim syntax file 2" Language: Murphi model checking language 3" Maintainer: Matthew Fernandez <[email protected]> 4" Last Change: 2019 Aug 27 5" Version: 2 6" Remark: Originally authored by Diego Ongaro <[email protected]> 7 8if version < 600 9 syntax clear 10elseif exists("b:current_syntax") 11 finish 12endif 13 14" Keywords are case insensitive. 15" Keep these in alphabetical order. 16syntax case ignore 17syn keyword murphiKeyword alias 18syn keyword murphiStructure array 19syn keyword murphiKeyword assert 20syn keyword murphiKeyword begin 21syn keyword murphiType boolean 22syn keyword murphiKeyword by 23syn keyword murphiLabel case 24syn keyword murphiKeyword clear 25syn keyword murphiLabel const 26syn keyword murphiRepeat do 27syn keyword murphiConditional else 28syn keyword murphiConditional elsif 29syn keyword murphiKeyword end 30syn keyword murphiKeyword endalias 31syn keyword murphiRepeat endexists 32syn keyword murphiRepeat endfor 33syn keyword murphiRepeat endforall 34syn keyword murphiKeyword endfunction 35syn keyword murphiConditional endif 36syn keyword murphiKeyword endprocedure 37syn keyword murphiStructure endrecord 38syn keyword murphiKeyword endrule 39syn keyword murphiKeyword endruleset 40syn keyword murphiKeyword endstartstate 41syn keyword murphiConditional endswitch 42syn keyword murphiRepeat endwhile 43syn keyword murphiStructure enum 44syn keyword murphiKeyword error 45syn keyword murphiRepeat exists 46syn keyword murphiBoolean false 47syn keyword murphiRepeat for 48syn keyword murphiRepeat forall 49syn keyword murphiKeyword function 50syn keyword murphiConditional if 51syn keyword murphiKeyword in 52syn keyword murphiKeyword interleaved 53syn keyword murphiLabel invariant 54syn keyword murphiFunction ismember 55syn keyword murphiFunction isundefined 56syn keyword murphiKeyword log 57syn keyword murphiStructure of 58syn keyword murphiType multiset 59syn keyword murphiFunction multisetadd 60syn keyword murphiFunction multisetcount 61syn keyword murphiFunction multisetremove 62syn keyword murphiFunction multisetremovepred 63syn keyword murphiKeyword procedure 64syn keyword murphiKeyword program 65syn keyword murphiKeyword put 66syn keyword murphiStructure record 67syn keyword murphiKeyword return 68syn keyword murphiLabel rule 69syn keyword murphiLabel ruleset 70syn keyword murphiType scalarset 71syn keyword murphiLabel startstate 72syn keyword murphiConditional switch 73syn keyword murphiConditional then 74syn keyword murphiRepeat to 75syn keyword murphiKeyword traceuntil 76syn keyword murphiBoolean true 77syn keyword murphiLabel type 78syn keyword murphiKeyword undefine 79syn keyword murphiStructure union 80syn keyword murphiLabel var 81syn keyword murphiRepeat while 82 83syn keyword murphiTodo contained todo xxx fixme 84syntax case match 85 86" Integers. 87syn match murphiNumber "\<\d\+\>" 88 89" Operators and special characters. 90syn match murphiOperator "[\+\-\*\/%&|=!<>:\?]\|\." 91syn match murphiDelimiter "\(:=\@!\|[;,]\)" 92syn match murphiSpecial "[()\[\]]" 93 94" Double equal sign is a common error: use one equal sign for equality testing. 95syn match murphiError "==[^>]"he=e-1 96" Double && and || are errors. 97syn match murphiError "&&\|||" 98 99" Strings. This is defined so late so that it overrides previous matches. 100syn region murphiString start=+"+ end=+"+ 101 102" Comments. This is defined so late so that it overrides previous matches. 103syn region murphiComment start="--" end="$" contains=murphiTodo 104syn region murphiComment start="/\*" end="\*/" contains=murphiTodo 105 106" Link the rules to some groups. 107hi def link murphiComment Comment 108hi def link murphiString String 109hi def link murphiNumber Number 110hi def link murphiBoolean Boolean 111hi def link murphiIdentifier Identifier 112hi def link murphiFunction Function 113hi def link murphiStatement Statement 114hi def link murphiConditional Conditional 115hi def link murphiRepeat Repeat 116hi def link murphiLabel Label 117hi def link murphiOperator Operator 118hi def link murphiKeyword Keyword 119hi def link murphiType Type 120hi def link murphiStructure Structure 121hi def link murphiSpecial Special 122hi def link murphiDelimiter Delimiter 123hi def link murphiError Error 124hi def link murphiTodo Todo 125 126let b:current_syntax = "murphi" 127