xref: /vim-8.2.3635/runtime/syntax/yacc.vim (revision d960d76d)
1" Vim syntax file
2" Language:	Yacc
3" Maintainer:	Charles E. Campbell, Jr. <[email protected]>
4" Last Change:	Aug 12, 2010
5" Version:	9
6" URL:	http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
7"
8" Options: {{{1
9"   g:yacc_uses_cpp : if this variable exists, then C++ is loaded rather than C
10
11" ---------------------------------------------------------------------
12" this version of syntax/yacc.vim requires 6.0 or later
13if version < 600
14 finish
15endif
16if exists("b:current_syntax")
17 syntax clear
18endif
19
20" ---------------------------------------------------------------------
21"  Folding Support {{{1
22if has("folding")
23 com! -nargs=+ HiFold	<args> fold
24else
25 com! -nargs=+ HiFold	<args>
26endif
27
28" ---------------------------------------------------------------------
29" Read the C syntax to start with {{{1
30if exists("g:yacc_uses_cpp")
31 syn include @yaccCode	<sfile>:p:h/cpp.vim
32else
33 syn include @yaccCode	<sfile>:p:h/c.vim
34endif
35
36" ---------------------------------------------------------------------
37"  Yacc Clusters: {{{1
38syn cluster yaccInitCluster	contains=yaccKey,yaccKeyActn,yaccBrkt,yaccType,yaccString,yaccUnionStart,yaccHeader2,yaccComment,yaccDefines,yaccParseParam,yaccParseOption
39syn cluster yaccRulesCluster	contains=yaccNonterminal,yaccString
40
41" ---------------------------------------------------------------------
42"  Yacc Sections: {{{1
43HiFold 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
44HiFold 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
45HiFold syn	region	yaccHeader2	matchgroup=yaccSep	start="^\s*\zs%{"	end="^\s*%}"		contains=@yaccCode	nextgroup=yaccInit	skipwhite skipempty contained
46HiFold syn	region	yaccHeader	matchgroup=yaccSep	start="^\s*\zs%{"	end="^\s*%}"		contains=@yaccCode	nextgroup=yaccInit	skipwhite skipempty
47HiFold syn	region	yaccRules	matchgroup=yaccSectionSep	start='^%%$'		end='^%%$'me=e-2,re=e-2	contains=@yaccRulesCluster	nextgroup=yaccEndCode	skipwhite skipempty contained
48HiFold syn	region	yaccEndCode	matchgroup=yaccSectionSep	start='^%%$'		end='\%$'		contains=@yaccCode	contained
49
50" ---------------------------------------------------------------------
51" Yacc Commands: {{{1
52syn	match	yaccDefines	'^%define\s\+.*$'
53syn	match	yaccParseParam	'%\(parse\|lex\)-param\>'		skipwhite	nextgroup=yaccParseParamStr
54syn	match	yaccParseOption '%\%(api\.pure\|pure-parser\|locations\|error-verbose\)\>'
55syn	region	yaccParseParamStr	contained matchgroup=Delimiter	start='{'	end='}'	contains=cStructure
56
57syn	match	yaccDelim	"[:|]"	contained
58syn	match	yaccOper	"@\d\+"	contained
59
60syn	match	yaccKey	"^\s*%\(token\|type\|left\|right\|start\|ident\|nonassoc\)\>"	contained
61syn	match	yaccKey	"\s%\(prec\|expect\)\>"	contained
62syn	match	yaccKey	"\$\(<[a-zA-Z_][a-zA-Z_0-9]*>\)\=[\$0-9]\+"	contained
63syn	keyword	yaccKeyActn	yyerrok yyclearin	contained
64
65syn	match	yaccUnionStart	"^%union"	skipwhite skipnl nextgroup=yaccUnion	contained
66HiFold syn	region	yaccUnion	matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}" contains=@yaccCode	contained
67syn	match	yaccBrkt	"[<>]"	contained
68syn	match	yaccType	"<[a-zA-Z_][a-zA-Z0-9_]*>"	contains=yaccBrkt	contained
69
70HiFold 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
71syn	region	yaccComment	start="/\*"	end="\*/"
72syn	match	yaccString	"'[^']*'"	contained
73
74
75" ---------------------------------------------------------------------
76" I'd really like to highlight just the outer {}.  Any suggestions??? {{{1
77syn	match	yaccCurlyError	"[{}]"
78HiFold syn	region	yaccAction	matchgroup=yaccCurly start="{" end="}" contains=@yaccCode	contained
79
80" ---------------------------------------------------------------------
81" Yacc synchronization: {{{1
82syn sync fromstart
83
84" ---------------------------------------------------------------------
85" Define the default highlighting. {{{1
86if !exists("did_yacc_syn_inits")
87  command -nargs=+ HiLink hi def link <args>
88
89  " Internal yacc highlighting links {{{2
90  HiLink yaccBrkt	yaccStmt
91  HiLink yaccKey	yaccStmt
92  HiLink yaccOper	yaccStmt
93  HiLink yaccUnionStart	yaccKey
94
95  " External yacc highlighting links {{{2
96  HiLink yaccComment	Comment
97  HiLink yaccCurly	Delimiter
98  HiLink yaccCurlyError	Error
99  HiLink yaccDefines	cDefine
100  HiLink yaccParseParam	yaccParseOption
101  HiLink yaccParseOption	cDefine
102  HiLink yaccNonterminal	Function
103  HiLink yaccDelim	Delimiter
104  HiLink yaccKeyActn	Special
105  HiLink yaccSectionSep	Todo
106  HiLink yaccSep	Delimiter
107  HiLink yaccString	String
108  HiLink yaccStmt	Statement
109  HiLink yaccType	Type
110
111  " since Bram doesn't like my Delimiter :| {{{2
112  HiLink Delimiter	Type
113
114  delcommand HiLink
115endif
116
117" ---------------------------------------------------------------------
118"  Cleanup: {{{1
119delcommand HiFold
120let b:current_syntax = "yacc"
121
122" ---------------------------------------------------------------------
123"  Modelines: {{{1
124" vim: ts=15 fdm=marker
125