xref: /vim-8.2.3635/runtime/syntax/yacc.vim (revision 044b68f4)
1" Vim syntax file
2" Language:	Yacc
3" Maintainer:	Dr. Charles E. Campbell, Jr. <[email protected]>
4" Last Change:	Feb 22, 2006
5" Version:	4
6" URL:	http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
7"
8" Option:
9"   g:yacc_uses_cpp : if this variable exists, then C++ is loaded rather than C
10
11" For version 5.x: Clear all syntax items
12" For version 6.x: Quit when a syntax file was already loaded
13if version < 600
14  syntax clear
15elseif exists("b:current_syntax")
16  finish
17endif
18
19" Read the C syntax to start with
20if version >= 600
21  if exists("g:yacc_uses_cpp")
22    runtime! syntax/cpp.vim
23  else
24    runtime! syntax/c.vim
25  endif
26elseif exists("g:yacc_uses_cpp")
27  so <sfile>:p:h/cpp.vim
28else
29  so <sfile>:p:h/c.vim
30endif
31
32" Clusters
33syn cluster	yaccActionGroup	contains=yaccDelim,cInParen,cTodo,cIncluded,yaccDelim,yaccCurlyError,yaccUnionCurly,yaccUnion,cUserLabel,cOctalZero,cCppOut2,cCppSkip,cErrInBracket,cErrInParen,cOctalError,cCommentStartError,cParenError
34syn cluster	yaccUnionGroup	contains=yaccKey,cComment,yaccCurly,cType,cStructure,cStorageClass,yaccUnionCurly
35
36" Yacc stuff
37syn match	yaccDelim	"^\s*[:|;]"
38syn match	yaccOper	"@\d\+"
39
40syn match	yaccKey	"^\s*%\(token\|type\|left\|right\|start\|ident\|nonassoc\)\>"
41syn match	yaccKey	"\s%\(prec\|expect\)\>"
42syn match	yaccKey	"\$\(<[a-zA-Z_][a-zA-Z_0-9]*>\)\=[\$0-9]\+"
43syn keyword	yaccKeyActn	yyerrok yyclearin
44
45syn match	yaccUnionStart	"^%union"	skipwhite skipnl nextgroup=yaccUnion
46syn region	yaccUnion	contained matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}"	contains=@yaccUnionGroup
47syn region	yaccUnionCurly	contained matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}" contains=@yaccUnionGroup
48syn match	yaccBrkt	contained "[<>]"
49syn match	yaccType	"<[a-zA-Z_][a-zA-Z0-9_]*>"	contains=yaccBrkt
50syn match	yaccDefinition	"^[A-Za-z][A-Za-z0-9_]*\_s*:"
51
52" special Yacc separators
53syn match	yaccSectionSep	"^[ \t]*%%"
54syn match	yaccSep	"^[ \t]*%{"
55syn match	yaccSep	"^[ \t]*%}"
56
57" I'd really like to highlight just the outer {}.  Any suggestions???
58syn match	yaccCurlyError	"[{}]"
59syn region	yaccAction	matchgroup=yaccCurly start="{" end="}" contains=ALLBUT,@yaccActionGroup
60
61
62" Define the default highlighting.
63" For version 5.7 and earlier: only when not done already
64" For version 5.8 and later: only when an item doesn't have highlighting yet
65if version >= 508 || !exists("did_yacc_syn_inits")
66  if version < 508
67    let did_yacchdl_syn_inits = 1
68    command -nargs=+ HiLink hi link <args>
69  else
70    command -nargs=+ HiLink hi def link <args>
71  endif
72
73  " Internal yacc highlighting links
74  HiLink yaccBrkt	yaccStmt
75  HiLink yaccKey	yaccStmt
76  HiLink yaccOper	yaccStmt
77  HiLink yaccUnionStart	yaccKey
78
79  " External yacc highlighting links
80  HiLink yaccCurly	Delimiter
81  HiLink yaccCurlyError	Error
82  HiLink yaccDefinition	Function
83  HiLink yaccDelim	Function
84  HiLink yaccKeyActn	Special
85  HiLink yaccSectionSep	Todo
86  HiLink yaccSep	Delimiter
87  HiLink yaccStmt	Statement
88  HiLink yaccType	Type
89
90  " since Bram doesn't like my Delimiter :|
91  HiLink Delimiter	Type
92
93  delcommand HiLink
94endif
95
96let b:current_syntax = "yacc"
97
98" vim: ts=15
99