3 " Maintainer: Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
4 " Last Change: Aug 2, 2010
6 " URL: http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
9 " g:yacc_uses_cpp : if this variable exists, then C++ is loaded rather than C
11 " ---------------------------------------------------------------------
12 " this version of syntax/yacc.vim requires 6.0 or later
16 if exists("b:current_syntax")
20 " ---------------------------------------------------------------------
21 " Folding Support {{{1
23 com! -nargs=+ HiFold <args> fold
25 com! -nargs=+ HiFold <args>
28 " ---------------------------------------------------------------------
29 " Read the C syntax to start with {{{1
30 if exists("g:yacc_uses_cpp")
31 syn include @yaccCode <sfile>:p:h/cpp.vim
33 syn include @yaccCode <sfile>:p:h/c.vim
36 " ---------------------------------------------------------------------
38 syn cluster yaccInitCluster contains=yaccKey,yaccKeyActn,yaccBrkt,yaccType,yaccString,yaccUnionStart,yaccHeader2,yaccComment,yaccDefines,yaccParseParam
39 syn cluster yaccRulesCluster contains=yaccNonterminal,yaccString
41 " ---------------------------------------------------------------------
43 HiFold syn region yaccInit start='.'ms=s-1,rs=s-1 matchgroup=yaccSectionSep end='^%%$'me=e-2,re=e-2 contains=@yaccInitCluster nextgroup=yaccRules skipwhite skipempty contained
44 HiFold syn region yaccInit2 start='\%^.'ms=s-1,rs=s-1 matchgroup=yaccSectionSep end='^%%$'me=e-2,re=e-2 contains=@yaccInitCluster nextgroup=yaccRules skipwhite skipempty
45 HiFold syn region yaccHeader2 matchgroup=yaccSep start="^\s*\zs%{" end="^\s*%}" contains=@yaccCode nextgroup=yaccInit skipwhite skipempty contained
46 HiFold syn region yaccHeader matchgroup=yaccSep start="^\s*\zs%{" end="^\s*%}" contains=@yaccCode nextgroup=yaccInit skipwhite skipempty
47 HiFold syn region yaccRules matchgroup=yaccSectionSep start='^%%$' end='^%%$'me=e-2,re=e-2 contains=@yaccRulesCluster nextgroup=yaccEndCode skipwhite skipempty contained
48 HiFold syn region yaccEndCode matchgroup=yaccSectionSep start='^%%$' end='\%$' contains=@yaccCode contained
50 " ---------------------------------------------------------------------
52 syn match yaccDefines '^%define\s\+.*$'
53 syn match yaccParseParam '%parse-param\>' skipwhite nextgroup=yaccParseParamStr
54 syn region yaccParseParamStr contained matchgroup=Delimiter start='{' end='}' contains=cStructure
56 syn match yaccDelim "[:|]" contained
57 syn match yaccOper "@\d\+" contained
59 syn match yaccKey "^\s*%\(token\|type\|left\|right\|start\|ident\|nonassoc\)\>" contained
60 syn match yaccKey "\s%\(prec\|expect\)\>" contained
61 syn match yaccKey "\$\(<[a-zA-Z_][a-zA-Z_0-9]*>\)\=[\$0-9]\+" contained
62 syn keyword yaccKeyActn yyerrok yyclearin contained
64 syn match yaccUnionStart "^%union" skipwhite skipnl nextgroup=yaccUnion contained
65 HiFold syn region yaccUnion matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}" contains=@yaccCode contained
66 syn match yaccBrkt "[<>]" contained
67 syn match yaccType "<[a-zA-Z_][a-zA-Z0-9_]*>" contains=yaccBrkt contained
69 HiFold syn region yaccNonterminal start="^\s*\a\w*\ze\_s*\(/\*\_.\{-}\*/\)\=\_s*:" matchgroup=yaccDelim end=";" matchgroup=yaccSectionSep end='^%%$'me=e-2,re=e-2 contains=yaccAction,yaccDelim,yaccString,yaccComment contained
70 syn region yaccComment start="/\*" end="\*/"
71 syn match yaccString "'[^']*'" contained
74 " ---------------------------------------------------------------------
75 " I'd really like to highlight just the outer {}. Any suggestions??? {{{1
76 syn match yaccCurlyError "[{}]"
77 HiFold syn region yaccAction matchgroup=yaccCurly start="{" end="}" contains=@yaccCode contained
79 " ---------------------------------------------------------------------
80 " Yacc synchronization: {{{1
83 " ---------------------------------------------------------------------
84 " Define the default highlighting. {{{1
85 if !exists("did_yacc_syn_inits")
86 command -nargs=+ HiLink hi def link <args>
88 " Internal yacc highlighting links {{{2
89 HiLink yaccBrkt yaccStmt
90 HiLink yaccKey yaccStmt
91 HiLink yaccOper yaccStmt
92 HiLink yaccUnionStart yaccKey
94 " External yacc highlighting links {{{2
95 HiLink yaccComment Comment
96 HiLink yaccCurly Delimiter
97 HiLink yaccCurlyError Error
98 HiLink yaccDefines cDefine
99 HiLink yaccParseParam cDefine
100 HiLink yaccNonterminal Function
101 HiLink yaccDelim Delimiter
102 HiLink yaccKeyActn Special
103 HiLink yaccSectionSep Todo
104 HiLink yaccSep Delimiter
105 HiLink yaccString String
106 HiLink yaccStmt Statement
109 " since Bram doesn't like my Delimiter :| {{{2
110 HiLink Delimiter Type
115 " ---------------------------------------------------------------------
118 let b:current_syntax = "yacc"
120 " ---------------------------------------------------------------------
122 " vim: ts=15 fdm=marker