Merge branch 'vim-with-runtime' into feat/quickfix-title
[vim_extended.git] / runtime / syntax / yacc.vim
blob1797b7a643cdfd55366655e1c952d30de81bf44d
1 " Vim syntax file
2 " Language:     Yacc
3 " Maintainer:   Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
4 " Last Change:  Oct 21, 2008
5 " Version:      7
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
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   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
77 syn sync fromstart
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
101   HiLink yaccType       Type
103   " since Bram doesn't like my Delimiter :| {{{2
104   HiLink Delimiter      Type
106   delcommand HiLink
107 endif
109 " ---------------------------------------------------------------------
110 "  Cleanup: {{{1
111 delcommand HiFold
112 let b:current_syntax = "yacc"
114 " ---------------------------------------------------------------------
115 "  Modelines: {{{1
116 " vim: ts=15 fdm=marker