blob: cc1c8477476e21da2adefcdd06f8c0c880f0febe [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: Yacc
Bram Moolenaar97d62492012-11-15 21:28:22 +01003" Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz>
Bram Moolenaare2719092015-01-10 15:09:25 +01004" Last Change: Nov 14, 2012
Bram Moolenaara6878372014-03-22 21:02:50 +01005" Version: 11
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")
Bram Moolenaar97d62492012-11-15 21:28:22 +010023 com! -nargs=+ SynFold <args> fold
Bram Moolenaar5c736222010-01-06 20:54:52 +010024else
Bram Moolenaar97d62492012-11-15 21:28:22 +010025 com! -nargs=+ SynFold <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 Moolenaar97d62492012-11-15 21:28:22 +010030" Read the C/C++ syntax to start with
31let s:Cpath= fnameescape(expand("<sfile>:p:h").(exists("g:yacc_uses_cpp")? "/cpp.vim" : "/c.vim"))
32if !filereadable(s:Cpath)
33 for s:Cpath in split(globpath(&rtp,(exists("g:yacc_uses_cpp")? "syntax/cpp.vim" : "syntax/c.vim")),"\n")
34 if filereadable(fnameescape(s:Cpath))
35 let s:Cpath= fnameescape(s:Cpath)
36 break
37 endif
38 endfor
Bram Moolenaar071d4272004-06-13 20:20:40 +000039endif
Bram Moolenaar97d62492012-11-15 21:28:22 +010040exe "syn include @yaccCode ".s:Cpath
Bram Moolenaar071d4272004-06-13 20:20:40 +000041
Bram Moolenaar8c8de832008-06-24 22:58:06 +000042" ---------------------------------------------------------------------
Bram Moolenaar5c736222010-01-06 20:54:52 +010043" Yacc Clusters: {{{1
Bram Moolenaar81af9252010-12-10 20:35:50 +010044syn cluster yaccInitCluster contains=yaccKey,yaccKeyActn,yaccBrkt,yaccType,yaccString,yaccUnionStart,yaccHeader2,yaccComment,yaccDefines,yaccParseParam,yaccParseOption
Bram Moolenaare2719092015-01-10 15:09:25 +010045syn cluster yaccRulesCluster contains=yaccNonterminal,yaccString
Bram Moolenaar071d4272004-06-13 20:20:40 +000046
Bram Moolenaar8c8de832008-06-24 22:58:06 +000047" ---------------------------------------------------------------------
Bram Moolenaar5c736222010-01-06 20:54:52 +010048" Yacc Sections: {{{1
Bram Moolenaar97d62492012-11-15 21:28:22 +010049SynFold 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
50SynFold 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
51SynFold syn region yaccHeader2 matchgroup=yaccSep start="^\s*\zs%{" end="^\s*%}" contains=@yaccCode nextgroup=yaccInit skipwhite skipempty contained
52SynFold syn region yaccHeader matchgroup=yaccSep start="^\s*\zs%{" end="^\s*%}" contains=@yaccCode nextgroup=yaccInit skipwhite skipempty
53SynFold syn region yaccRules matchgroup=yaccSectionSep start='^%%$' end='^%%$'me=e-2,re=e-2 contains=@yaccRulesCluster nextgroup=yaccEndCode skipwhite skipempty contained
54SynFold syn region yaccEndCode matchgroup=yaccSectionSep start='^%%$' end='\%$' contains=@yaccCode contained
Bram Moolenaar071d4272004-06-13 20:20:40 +000055
Bram Moolenaar8c8de832008-06-24 22:58:06 +000056" ---------------------------------------------------------------------
Bram Moolenaar5c736222010-01-06 20:54:52 +010057" Yacc Commands: {{{1
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020058syn match yaccDefines '^%define\s\+.*$'
Bram Moolenaar81af9252010-12-10 20:35:50 +010059syn match yaccParseParam '%\(parse\|lex\)-param\>' skipwhite nextgroup=yaccParseParamStr
60syn match yaccParseOption '%\%(api\.pure\|pure-parser\|locations\|error-verbose\)\>'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020061syn region yaccParseParamStr contained matchgroup=Delimiter start='{' end='}' contains=cStructure
62
Bram Moolenaar5c736222010-01-06 20:54:52 +010063syn match yaccDelim "[:|]" contained
64syn match yaccOper "@\d\+" contained
65
66syn match yaccKey "^\s*%\(token\|type\|left\|right\|start\|ident\|nonassoc\)\>" contained
67syn match yaccKey "\s%\(prec\|expect\)\>" contained
68syn match yaccKey "\$\(<[a-zA-Z_][a-zA-Z_0-9]*>\)\=[\$0-9]\+" contained
69syn keyword yaccKeyActn yyerrok yyclearin contained
70
71syn match yaccUnionStart "^%union" skipwhite skipnl nextgroup=yaccUnion contained
Bram Moolenaar97d62492012-11-15 21:28:22 +010072SynFold syn region yaccUnion matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}" contains=@yaccCode contained
Bram Moolenaar5c736222010-01-06 20:54:52 +010073syn match yaccBrkt "[<>]" contained
74syn match yaccType "<[a-zA-Z_][a-zA-Z0-9_]*>" contains=yaccBrkt contained
75
Bram Moolenaar97d62492012-11-15 21:28:22 +010076SynFold 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
Bram Moolenaar5c736222010-01-06 20:54:52 +010077syn region yaccComment start="/\*" end="\*/"
78syn match yaccString "'[^']*'" contained
79
Bram Moolenaar071d4272004-06-13 20:20:40 +000080
Bram Moolenaar8c8de832008-06-24 22:58:06 +000081" ---------------------------------------------------------------------
82" I'd really like to highlight just the outer {}. Any suggestions??? {{{1
Bram Moolenaar5c736222010-01-06 20:54:52 +010083syn match yaccCurlyError "[{}]"
Bram Moolenaar97d62492012-11-15 21:28:22 +010084SynFold syn region yaccAction matchgroup=yaccCurly start="{" end="}" contains=@yaccCode,yaccVar contained
85syn match yaccVar '\$\d\+\|\$\$\|\$<\I\i*>\$\|\$<\I\i*>\d\+' containedin=cParen,cPreProc,cMulti contained
Bram Moolenaar071d4272004-06-13 20:20:40 +000086
Bram Moolenaar8c8de832008-06-24 22:58:06 +000087" ---------------------------------------------------------------------
88" Yacc synchronization: {{{1
Bram Moolenaar5c736222010-01-06 20:54:52 +010089syn sync fromstart
Bram Moolenaar071d4272004-06-13 20:20:40 +000090
Bram Moolenaar8c8de832008-06-24 22:58:06 +000091" ---------------------------------------------------------------------
92" Define the default highlighting. {{{1
Bram Moolenaar5c736222010-01-06 20:54:52 +010093if !exists("did_yacc_syn_inits")
Bram Moolenaar97d62492012-11-15 21:28:22 +010094 hi def link yaccBrkt yaccStmt
95 hi def link yaccComment Comment
96 hi def link yaccCurly Delimiter
97 hi def link yaccCurlyError Error
98 hi def link yaccDefines cDefine
99 hi def link yaccDelim Delimiter
100 hi def link yaccKeyActn Special
101 hi def link yaccKey yaccStmt
102 hi def link yaccNonterminal Function
103 hi def link yaccOper yaccStmt
104 hi def link yaccParseOption cDefine
105 hi def link yaccParseParam yaccParseOption
106 hi def link yaccSectionSep Todo
107 hi def link yaccSep Delimiter
108 hi def link yaccStmt Statement
109 hi def link yaccString String
110 hi def link yaccType Type
111 hi def link yaccUnionStart yaccKey
112 hi def link yaccVar Special
Bram Moolenaar071d4272004-06-13 20:20:40 +0000113endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100114
115" ---------------------------------------------------------------------
116" Cleanup: {{{1
Bram Moolenaar97d62492012-11-15 21:28:22 +0100117delcommand SynFold
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