update vim to 7.4
[msysgit.git] / share / vim / vim73 / syntax / yacc.vim
blobc3916d0e53baa64845f5e70364d016ab515820d1
1 " Vim syntax file
2 " Language:     Yacc
3 " Maintainer:   Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
4 " Last Change:  Aug 2, 2010
5 " Version:      8
6 " URL:  http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
8 " Options: {{{1
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
13 if version < 600
14  finish
15 endif
16 if exists("b:current_syntax")
17  syntax clear
18 endif
20 " ---------------------------------------------------------------------
21 "  Folding Support {{{1
22 if has("folding")
23  com! -nargs=+ HiFold   <args> fold
24 else
25  com! -nargs=+ HiFold   <args>
26 endif
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
32 else
33  syn include @yaccCode  <sfile>:p:h/c.vim
34 endif
36 " ---------------------------------------------------------------------
37 "  Yacc Clusters: {{{1
38 syn cluster yaccInitCluster     contains=yaccKey,yaccKeyActn,yaccBrkt,yaccType,yaccString,yaccUnionStart,yaccHeader2,yaccComment,yaccDefines,yaccParseParam
39 syn cluster yaccRulesCluster    contains=yaccNonterminal,yaccString
41 " ---------------------------------------------------------------------
42 "  Yacc Sections: {{{1
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 " ---------------------------------------------------------------------
51 " Yacc Commands: {{{1
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
81 syn sync fromstart
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
107   HiLink yaccType       Type
109   " since Bram doesn't like my Delimiter :| {{{2
110   HiLink Delimiter      Type
112   delcommand HiLink
113 endif
115 " ---------------------------------------------------------------------
116 "  Cleanup: {{{1
117 delcommand HiFold
118 let b:current_syntax = "yacc"
120 " ---------------------------------------------------------------------
121 "  Modelines: {{{1
122 " vim: ts=15 fdm=marker