blob: c3916d0e53baa64845f5e70364d016ab515820d1 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: Yacc
Bram Moolenaar8c8de832008-06-24 22:58:06 +00003" Maintainer: Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02004" Last Change: Aug 2, 2010
5" Version: 8
Bram Moolenaarcafda4f2005-09-06 19:25:11 +00006" URL: http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
Bram Moolenaar071d4272004-06-13 20:20:40 +00007"
Bram Moolenaar8c8de832008-06-24 22:58:06 +00008" Options: {{{1
Bram Moolenaardf1bdc92006-02-23 21:32:16 +00009" g:yacc_uses_cpp : if this variable exists, then C++ is loaded rather than C
Bram Moolenaar071d4272004-06-13 20:20:40 +000010
Bram Moolenaar8c8de832008-06-24 22:58:06 +000011" ---------------------------------------------------------------------
Bram Moolenaar5c736222010-01-06 20:54:52 +010012" this version of syntax/yacc.vim requires 6.0 or later
Bram Moolenaar071d4272004-06-13 20:20:40 +000013if version < 600
Bram Moolenaar5c736222010-01-06 20:54:52 +010014 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>
Bram Moolenaar071d4272004-06-13 20:20:40 +000026endif
27
Bram Moolenaar8c8de832008-06-24 22:58:06 +000028" ---------------------------------------------------------------------
29" Read the C syntax to start with {{{1
Bram Moolenaar5c736222010-01-06 20:54:52 +010030if exists("g:yacc_uses_cpp")
31 syn include @yaccCode <sfile>:p:h/cpp.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +000032else
Bram Moolenaar5c736222010-01-06 20:54:52 +010033 syn include @yaccCode <sfile>:p:h/c.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +000034endif
35
Bram Moolenaar8c8de832008-06-24 22:58:06 +000036" ---------------------------------------------------------------------
Bram Moolenaar5c736222010-01-06 20:54:52 +010037" Yacc Clusters: {{{1
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020038syn cluster yaccInitCluster contains=yaccKey,yaccKeyActn,yaccBrkt,yaccType,yaccString,yaccUnionStart,yaccHeader2,yaccComment,yaccDefines,yaccParseParam
Bram Moolenaar5c736222010-01-06 20:54:52 +010039syn cluster yaccRulesCluster contains=yaccNonterminal,yaccString
Bram Moolenaar071d4272004-06-13 20:20:40 +000040
Bram Moolenaar8c8de832008-06-24 22:58:06 +000041" ---------------------------------------------------------------------
Bram Moolenaar5c736222010-01-06 20:54:52 +010042" 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
Bram Moolenaar071d4272004-06-13 20:20:40 +000049
Bram Moolenaar8c8de832008-06-24 22:58:06 +000050" ---------------------------------------------------------------------
Bram Moolenaar5c736222010-01-06 20:54:52 +010051" Yacc Commands: {{{1
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020052syn match yaccDefines '^%define\s\+.*$'
53syn match yaccParseParam '%parse-param\>' skipwhite nextgroup=yaccParseParamStr
54syn region yaccParseParamStr contained matchgroup=Delimiter start='{' end='}' contains=cStructure
55
Bram Moolenaar5c736222010-01-06 20:54:52 +010056syn match yaccDelim "[:|]" contained
57syn match yaccOper "@\d\+" contained
58
59syn match yaccKey "^\s*%\(token\|type\|left\|right\|start\|ident\|nonassoc\)\>" contained
60syn match yaccKey "\s%\(prec\|expect\)\>" contained
61syn match yaccKey "\$\(<[a-zA-Z_][a-zA-Z_0-9]*>\)\=[\$0-9]\+" contained
62syn keyword yaccKeyActn yyerrok yyclearin contained
63
64syn match yaccUnionStart "^%union" skipwhite skipnl nextgroup=yaccUnion contained
65HiFold syn region yaccUnion matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}" contains=@yaccCode contained
66syn match yaccBrkt "[<>]" contained
67syn match yaccType "<[a-zA-Z_][a-zA-Z0-9_]*>" contains=yaccBrkt contained
68
69HiFold 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
70syn region yaccComment start="/\*" end="\*/"
71syn match yaccString "'[^']*'" contained
72
Bram Moolenaar071d4272004-06-13 20:20:40 +000073
Bram Moolenaar8c8de832008-06-24 22:58:06 +000074" ---------------------------------------------------------------------
75" I'd really like to highlight just the outer {}. Any suggestions??? {{{1
Bram Moolenaar5c736222010-01-06 20:54:52 +010076syn match yaccCurlyError "[{}]"
77HiFold syn region yaccAction matchgroup=yaccCurly start="{" end="}" contains=@yaccCode contained
Bram Moolenaar071d4272004-06-13 20:20:40 +000078
Bram Moolenaar8c8de832008-06-24 22:58:06 +000079" ---------------------------------------------------------------------
80" Yacc synchronization: {{{1
Bram Moolenaar5c736222010-01-06 20:54:52 +010081syn sync fromstart
Bram Moolenaar071d4272004-06-13 20:20:40 +000082
Bram Moolenaar8c8de832008-06-24 22:58:06 +000083" ---------------------------------------------------------------------
84" Define the default highlighting. {{{1
Bram Moolenaar5c736222010-01-06 20:54:52 +010085if !exists("did_yacc_syn_inits")
86 command -nargs=+ HiLink hi def link <args>
Bram Moolenaar071d4272004-06-13 20:20:40 +000087
Bram Moolenaar8c8de832008-06-24 22:58:06 +000088 " Internal yacc highlighting links {{{2
Bram Moolenaar071d4272004-06-13 20:20:40 +000089 HiLink yaccBrkt yaccStmt
90 HiLink yaccKey yaccStmt
91 HiLink yaccOper yaccStmt
92 HiLink yaccUnionStart yaccKey
93
Bram Moolenaar8c8de832008-06-24 22:58:06 +000094 " External yacc highlighting links {{{2
Bram Moolenaar5c736222010-01-06 20:54:52 +010095 HiLink yaccComment Comment
Bram Moolenaar071d4272004-06-13 20:20:40 +000096 HiLink yaccCurly Delimiter
97 HiLink yaccCurlyError Error
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020098 HiLink yaccDefines cDefine
99 HiLink yaccParseParam cDefine
Bram Moolenaar5c736222010-01-06 20:54:52 +0100100 HiLink yaccNonterminal Function
101 HiLink yaccDelim Delimiter
Bram Moolenaar071d4272004-06-13 20:20:40 +0000102 HiLink yaccKeyActn Special
103 HiLink yaccSectionSep Todo
104 HiLink yaccSep Delimiter
Bram Moolenaar5c736222010-01-06 20:54:52 +0100105 HiLink yaccString String
Bram Moolenaar071d4272004-06-13 20:20:40 +0000106 HiLink yaccStmt Statement
107 HiLink yaccType Type
108
Bram Moolenaar8c8de832008-06-24 22:58:06 +0000109 " since Bram doesn't like my Delimiter :| {{{2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000110 HiLink Delimiter Type
111
112 delcommand HiLink
113endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100114
115" ---------------------------------------------------------------------
116" Cleanup: {{{1
117delcommand HiFold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000118let b:current_syntax = "yacc"
119
Bram Moolenaar8c8de832008-06-24 22:58:06 +0000120" ---------------------------------------------------------------------
121" Modelines: {{{1
122" vim: ts=15 fdm=marker