3 " Maintainer: Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
4 " Last Change: Oct 21, 2008
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
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 yaccDelim "[:|]" contained
53 syn match yaccOper "@\d\+" contained
55 syn match yaccKey "^\s*%\(token\|type\|left\|right\|start\|ident\|nonassoc\)\>" contained
56 syn match yaccKey "\s%\(prec\|expect\)\>" contained
57 syn match yaccKey "\$\(<[a-zA-Z_][a-zA-Z_0-9]*>\)\=[\$0-9]\+" contained
58 syn keyword yaccKeyActn yyerrok yyclearin contained
60 syn match yaccUnionStart "^%union" skipwhite skipnl nextgroup=yaccUnion contained
61 HiFold syn region yaccUnion matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}" contains=@yaccCode contained
62 syn match yaccBrkt "[<>]" contained
63 syn match yaccType "<[a-zA-Z_][a-zA-Z0-9_]*>" contains=yaccBrkt contained
65 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
66 syn region yaccComment start="/\*" end="\*/"
67 syn match yaccString "'[^']*'" contained
70 " ---------------------------------------------------------------------
71 " I'd really like to highlight just the outer {}. Any suggestions??? {{{1
72 syn match yaccCurlyError "[{}]"
73 HiFold syn region yaccAction matchgroup=yaccCurly start="{" end="}" contains=@yaccCode contained
75 " ---------------------------------------------------------------------
76 " Yacc synchronization: {{{1
79 " ---------------------------------------------------------------------
80 " Define the default highlighting. {{{1
81 if !exists("did_yacc_syn_inits")
82 command -nargs=+ HiLink hi def link <args>
84 " Internal yacc highlighting links {{{2
85 HiLink yaccBrkt yaccStmt
86 HiLink yaccKey yaccStmt
87 HiLink yaccOper yaccStmt
88 HiLink yaccUnionStart yaccKey
90 " External yacc highlighting links {{{2
91 HiLink yaccComment Comment
92 HiLink yaccCurly Delimiter
93 HiLink yaccCurlyError Error
94 HiLink yaccNonterminal Function
95 HiLink yaccDelim Delimiter
96 HiLink yaccKeyActn Special
97 HiLink yaccSectionSep Todo
98 HiLink yaccSep Delimiter
99 HiLink yaccString String
100 HiLink yaccStmt Statement
103 " since Bram doesn't like my Delimiter :| {{{2
104 HiLink Delimiter Type
109 " ---------------------------------------------------------------------
112 let b:current_syntax = "yacc"
114 " ---------------------------------------------------------------------
116 " vim: ts=15 fdm=marker