blob: 147728b7ee36582e84b355bd5cb36b80ae7db6fb [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: Yacc
3" Maintainer: Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
Bram Moolenaarcafda4f2005-09-06 19:25:11 +00004" Last Change: Sep 06, 2005
5" Version: 3
6" URL: http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
Bram Moolenaar071d4272004-06-13 20:20:40 +00007"
8" Option:
9" yacc_uses_cpp : if this variable exists, then C++ is loaded rather than C
10
11" For version 5.x: Clear all syntax items
12" For version 6.x: Quit when a syntax file was already loaded
13if version < 600
14 syntax clear
15elseif exists("b:current_syntax")
16 finish
17endif
18
19" Read the C syntax to start with
20if version >= 600
21 if exists("yacc_uses_cpp")
22 runtime! syntax/cpp.vim
23 else
24 runtime! syntax/c.vim
25 endif
26elseif exists("yacc_uses_cpp")
27 so <sfile>:p:h/cpp.vim
28else
29 so <sfile>:p:h/c.vim
30endif
31
32" Clusters
33syn cluster yaccActionGroup contains=yaccDelim,cInParen,cTodo,cIncluded,yaccDelim,yaccCurlyError,yaccUnionCurly,yaccUnion,cUserLabel,cOctalZero,cCppOut2,cCppSkip,cErrInBracket,cErrInParen,cOctalError,cCommentStartError,cParenError
34syn cluster yaccUnionGroup contains=yaccKey,cComment,yaccCurly,cType,cStructure,cStorageClass,yaccUnionCurly
35
36" Yacc stuff
37syn match yaccDelim "^\s*[:|;]"
38syn match yaccOper "@\d\+"
39
40syn match yaccKey "^\s*%\(token\|type\|left\|right\|start\|ident\|nonassoc\)\>"
41syn match yaccKey "\s%\(prec\|expect\)\>"
42syn match yaccKey "\$\(<[a-zA-Z_][a-zA-Z_0-9]*>\)\=[\$0-9]\+"
43syn keyword yaccKeyActn yyerrok yyclearin
44
45syn match yaccUnionStart "^%union" skipwhite skipnl nextgroup=yaccUnion
46syn region yaccUnion contained matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}" contains=@yaccUnionGroup
47syn region yaccUnionCurly contained matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}" contains=@yaccUnionGroup
48syn match yaccBrkt contained "[<>]"
49syn match yaccType "<[a-zA-Z_][a-zA-Z0-9_]*>" contains=yaccBrkt
50syn match yaccDefinition "^[A-Za-z][A-Za-z0-9_]*[ \t]*:"
51
52" special Yacc separators
53syn match yaccSectionSep "^[ \t]*%%"
54syn match yaccSep "^[ \t]*%{"
55syn match yaccSep "^[ \t]*%}"
56
57" I'd really like to highlight just the outer {}. Any suggestions???
58syn match yaccCurlyError "[{}]"
59syn region yaccAction matchgroup=yaccCurly start="{" end="}" contains=ALLBUT,@yaccActionGroup
60
61
62" Define the default highlighting.
63" For version 5.7 and earlier: only when not done already
64" For version 5.8 and later: only when an item doesn't have highlighting yet
65if version >= 508 || !exists("did_yacc_syn_inits")
66 if version < 508
67 let did_yacchdl_syn_inits = 1
68 command -nargs=+ HiLink hi link <args>
69 else
70 command -nargs=+ HiLink hi def link <args>
71 endif
72
73 " Internal yacc highlighting links
74 HiLink yaccBrkt yaccStmt
75 HiLink yaccKey yaccStmt
76 HiLink yaccOper yaccStmt
77 HiLink yaccUnionStart yaccKey
78
79 " External yacc highlighting links
80 HiLink yaccCurly Delimiter
81 HiLink yaccCurlyError Error
82 HiLink yaccDefinition Function
83 HiLink yaccDelim Function
84 HiLink yaccKeyActn Special
85 HiLink yaccSectionSep Todo
86 HiLink yaccSep Delimiter
87 HiLink yaccStmt Statement
88 HiLink yaccType Type
89
90 " since Bram doesn't like my Delimiter :|
91 HiLink Delimiter Type
92
93 delcommand HiLink
94endif
95
96let b:current_syntax = "yacc"
97
98" vim: ts=15