7
|
1 " Vim syntax file
|
|
2 " Language: Yacc
|
1624
|
3 " Maintainer: Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
|
2034
|
4 " Last Change: Oct 21, 2008
|
|
5 " Version: 7
|
507
|
6 " URL: http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
|
7
|
7 "
|
1624
|
8 " Options: {{{1
|
683
|
9 " g:yacc_uses_cpp : if this variable exists, then C++ is loaded rather than C
|
7
|
10
|
1624
|
11 " ---------------------------------------------------------------------
|
2034
|
12 " this version of syntax/yacc.vim requires 6.0 or later
|
7
|
13 if version < 600
|
2034
|
14 finish
|
|
15 endif
|
|
16 if exists("b:current_syntax")
|
|
17 syntax clear
|
|
18 endif
|
|
19
|
|
20 " ---------------------------------------------------------------------
|
|
21 " Folding Support {{{1
|
|
22 if has("folding")
|
|
23 com! -nargs=+ HiFold <args> fold
|
|
24 else
|
|
25 com! -nargs=+ HiFold <args>
|
7
|
26 endif
|
|
27
|
1624
|
28 " ---------------------------------------------------------------------
|
|
29 " Read the C syntax to start with {{{1
|
2034
|
30 if exists("g:yacc_uses_cpp")
|
|
31 syn include @yaccCode <sfile>:p:h/cpp.vim
|
7
|
32 else
|
2034
|
33 syn include @yaccCode <sfile>:p:h/c.vim
|
7
|
34 endif
|
|
35
|
1624
|
36 " ---------------------------------------------------------------------
|
2034
|
37 " Yacc Clusters: {{{1
|
|
38 syn cluster yaccInitCluster contains=yaccKey,yaccKeyActn,yaccBrkt,yaccType,yaccString,yaccUnionStart,yaccHeader2,yaccComment
|
|
39 syn cluster yaccRulesCluster contains=yaccNonterminal,yaccString
|
|
40
|
|
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
|
7
|
49
|
1624
|
50 " ---------------------------------------------------------------------
|
2034
|
51 " Yacc Commands: {{{1
|
|
52 syn match yaccDelim "[:|]" contained
|
|
53 syn match yaccOper "@\d\+" contained
|
7
|
54
|
2034
|
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
|
7
|
59
|
2034
|
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
|
7
|
64
|
2034
|
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
|
|
68
|
7
|
69
|
1624
|
70 " ---------------------------------------------------------------------
|
|
71 " I'd really like to highlight just the outer {}. Any suggestions??? {{{1
|
2034
|
72 syn match yaccCurlyError "[{}]"
|
|
73 HiFold syn region yaccAction matchgroup=yaccCurly start="{" end="}" contains=@yaccCode contained
|
7
|
74
|
1624
|
75 " ---------------------------------------------------------------------
|
|
76 " Yacc synchronization: {{{1
|
2034
|
77 syn sync fromstart
|
7
|
78
|
1624
|
79 " ---------------------------------------------------------------------
|
|
80 " Define the default highlighting. {{{1
|
2034
|
81 if !exists("did_yacc_syn_inits")
|
|
82 command -nargs=+ HiLink hi def link <args>
|
7
|
83
|
1624
|
84 " Internal yacc highlighting links {{{2
|
7
|
85 HiLink yaccBrkt yaccStmt
|
|
86 HiLink yaccKey yaccStmt
|
|
87 HiLink yaccOper yaccStmt
|
|
88 HiLink yaccUnionStart yaccKey
|
|
89
|
1624
|
90 " External yacc highlighting links {{{2
|
2034
|
91 HiLink yaccComment Comment
|
7
|
92 HiLink yaccCurly Delimiter
|
|
93 HiLink yaccCurlyError Error
|
2034
|
94 HiLink yaccNonterminal Function
|
|
95 HiLink yaccDelim Delimiter
|
7
|
96 HiLink yaccKeyActn Special
|
|
97 HiLink yaccSectionSep Todo
|
|
98 HiLink yaccSep Delimiter
|
2034
|
99 HiLink yaccString String
|
7
|
100 HiLink yaccStmt Statement
|
|
101 HiLink yaccType Type
|
|
102
|
1624
|
103 " since Bram doesn't like my Delimiter :| {{{2
|
7
|
104 HiLink Delimiter Type
|
|
105
|
|
106 delcommand HiLink
|
|
107 endif
|
2034
|
108
|
|
109 " ---------------------------------------------------------------------
|
|
110 " Cleanup: {{{1
|
|
111 delcommand HiFold
|
7
|
112 let b:current_syntax = "yacc"
|
|
113
|
1624
|
114 " ---------------------------------------------------------------------
|
|
115 " Modelines: {{{1
|
|
116 " vim: ts=15 fdm=marker
|