blob: 8100489422bbc553b58392fecb7799c4c0a19569 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: Yacc
Christian Brabandtf9ca1392024-02-19 20:37:11 +01003" Former Maintainer: Charles E. Campbell
Bram Moolenaar723dd942019-04-04 13:11:03 +02004" Last Change: Mar 25, 2019
Bram Moolenaar1d9215b2020-01-25 13:27:42 +01005" Version: 17
Christian Brabandtf9ca1392024-02-19 20:37:11 +01006" 2024 Feb 19 by Vim Project (announce adoption)
7" Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_YACC
Bram Moolenaar071d4272004-06-13 20:20:40 +00008"
Bram Moolenaar8c8de832008-06-24 22:58:06 +00009" Options: {{{1
Bram Moolenaardf1bdc92006-02-23 21:32:16 +000010" g:yacc_uses_cpp : if this variable exists, then C++ is loaded rather than C
Bram Moolenaar071d4272004-06-13 20:20:40 +000011
Bram Moolenaar8c8de832008-06-24 22:58:06 +000012" ---------------------------------------------------------------------
Bram Moolenaar5c736222010-01-06 20:54:52 +010013" this version of syntax/yacc.vim requires 6.0 or later
Bram Moolenaar5c736222010-01-06 20:54:52 +010014if exists("b:current_syntax")
15 syntax clear
16endif
17
18" ---------------------------------------------------------------------
19" Folding Support {{{1
20if has("folding")
Bram Moolenaar97d62492012-11-15 21:28:22 +010021 com! -nargs=+ SynFold <args> fold
Bram Moolenaar5c736222010-01-06 20:54:52 +010022else
Bram Moolenaar97d62492012-11-15 21:28:22 +010023 com! -nargs=+ SynFold <args>
Bram Moolenaar071d4272004-06-13 20:20:40 +000024endif
25
Bram Moolenaar8c8de832008-06-24 22:58:06 +000026" ---------------------------------------------------------------------
27" Read the C syntax to start with {{{1
Bram Moolenaar97d62492012-11-15 21:28:22 +010028" Read the C/C++ syntax to start with
29let s:Cpath= fnameescape(expand("<sfile>:p:h").(exists("g:yacc_uses_cpp")? "/cpp.vim" : "/c.vim"))
30if !filereadable(s:Cpath)
31 for s:Cpath in split(globpath(&rtp,(exists("g:yacc_uses_cpp")? "syntax/cpp.vim" : "syntax/c.vim")),"\n")
32 if filereadable(fnameescape(s:Cpath))
33 let s:Cpath= fnameescape(s:Cpath)
34 break
35 endif
36 endfor
Bram Moolenaar071d4272004-06-13 20:20:40 +000037endif
Bram Moolenaar97d62492012-11-15 21:28:22 +010038exe "syn include @yaccCode ".s:Cpath
Bram Moolenaar071d4272004-06-13 20:20:40 +000039
Bram Moolenaar8c8de832008-06-24 22:58:06 +000040" ---------------------------------------------------------------------
Bram Moolenaar5c736222010-01-06 20:54:52 +010041" Yacc Clusters: {{{1
Bram Moolenaar81af9252010-12-10 20:35:50 +010042syn cluster yaccInitCluster contains=yaccKey,yaccKeyActn,yaccBrkt,yaccType,yaccString,yaccUnionStart,yaccHeader2,yaccComment,yaccDefines,yaccParseParam,yaccParseOption
Bram Moolenaar9da7ff72015-01-14 12:52:36 +010043syn cluster yaccRulesCluster contains=yaccNonterminal,yaccString,yaccComment
Bram Moolenaar071d4272004-06-13 20:20:40 +000044
Bram Moolenaar8c8de832008-06-24 22:58:06 +000045" ---------------------------------------------------------------------
Bram Moolenaar5c736222010-01-06 20:54:52 +010046" Yacc Sections: {{{1
Bram Moolenaar723dd942019-04-04 13:11:03 +020047SynFold syn region yaccInit start='.'ms=s-1,rs=s-1 matchgroup=yaccSectionSep end='^%%\ze\(\s*/[*/].*\)\=$'me=e-2,re=e-2 contains=@yaccInitCluster nextgroup=yaccRules skipwhite skipempty contained
48SynFold syn region yaccInit2 start='\%^.'ms=s-1,rs=s-1 matchgroup=yaccSectionSep end='^%%\ze\(\s*/[*/].*\)\=$'me=e-2,re=e-2 contains=@yaccInitCluster nextgroup=yaccRules skipwhite skipempty
49SynFold syn region yaccHeader2 matchgroup=yaccSep start="^\s*\zs%{" end="^\s*%}" contains=@yaccCode nextgroup=yaccInit skipwhite skipempty contained
50SynFold syn region yaccHeader matchgroup=yaccSep start="^\s*\zs%{" end="^\s*%}" contains=@yaccCode nextgroup=yaccInit skipwhite skipempty
51SynFold syn region yaccRules matchgroup=yaccSectionSep start='^%%\ze\(\s*/[*/].*\)\=$' end='^%%\ze\(\s*/[*/].*\)\=$'me=e-2,re=e-2 contains=@yaccRulesCluster nextgroup=yaccEndCode skipwhite skipempty contained
52SynFold syn region yaccEndCode matchgroup=yaccSectionSep start='^%%\ze\(\s*/[*/].*\)\=$' end='\%$' contains=@yaccCode contained
Bram Moolenaar071d4272004-06-13 20:20:40 +000053
Bram Moolenaar8c8de832008-06-24 22:58:06 +000054" ---------------------------------------------------------------------
Bram Moolenaar5c736222010-01-06 20:54:52 +010055" Yacc Commands: {{{1
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020056syn match yaccDefines '^%define\s\+.*$'
Bram Moolenaar81af9252010-12-10 20:35:50 +010057syn match yaccParseParam '%\(parse\|lex\)-param\>' skipwhite nextgroup=yaccParseParamStr
58syn match yaccParseOption '%\%(api\.pure\|pure-parser\|locations\|error-verbose\)\>'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020059syn region yaccParseParamStr contained matchgroup=Delimiter start='{' end='}' contains=cStructure
60
Bram Moolenaar5c736222010-01-06 20:54:52 +010061syn match yaccDelim "[:|]" contained
62syn match yaccOper "@\d\+" contained
63
64syn match yaccKey "^\s*%\(token\|type\|left\|right\|start\|ident\|nonassoc\)\>" contained
65syn match yaccKey "\s%\(prec\|expect\)\>" contained
66syn match yaccKey "\$\(<[a-zA-Z_][a-zA-Z_0-9]*>\)\=[\$0-9]\+" contained
67syn keyword yaccKeyActn yyerrok yyclearin contained
68
69syn match yaccUnionStart "^%union" skipwhite skipnl nextgroup=yaccUnion contained
Bram Moolenaar97d62492012-11-15 21:28:22 +010070SynFold syn region yaccUnion matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}" contains=@yaccCode contained
Bram Moolenaar5c736222010-01-06 20:54:52 +010071syn match yaccBrkt "[<>]" contained
72syn match yaccType "<[a-zA-Z_][a-zA-Z0-9_]*>" contains=yaccBrkt contained
73
Bram Moolenaar97d62492012-11-15 21:28:22 +010074SynFold 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 +010075syn region yaccComment start="/\*" end="\*/"
Bram Moolenaar723dd942019-04-04 13:11:03 +020076syn region yaccComment start="//" end="$"
Bram Moolenaar5c736222010-01-06 20:54:52 +010077syn match yaccString "'[^']*'" contained
78
Bram Moolenaar071d4272004-06-13 20:20:40 +000079
Bram Moolenaar8c8de832008-06-24 22:58:06 +000080" ---------------------------------------------------------------------
81" I'd really like to highlight just the outer {}. Any suggestions??? {{{1
Bram Moolenaar5c736222010-01-06 20:54:52 +010082syn match yaccCurlyError "[{}]"
Bram Moolenaar97d62492012-11-15 21:28:22 +010083SynFold syn region yaccAction matchgroup=yaccCurly start="{" end="}" contains=@yaccCode,yaccVar contained
84syn match yaccVar '\$\d\+\|\$\$\|\$<\I\i*>\$\|\$<\I\i*>\d\+' containedin=cParen,cPreProc,cMulti contained
Bram Moolenaar071d4272004-06-13 20:20:40 +000085
Bram Moolenaar8c8de832008-06-24 22:58:06 +000086" ---------------------------------------------------------------------
87" Yacc synchronization: {{{1
Bram Moolenaar5c736222010-01-06 20:54:52 +010088syn sync fromstart
Bram Moolenaar071d4272004-06-13 20:20:40 +000089
Bram Moolenaar8c8de832008-06-24 22:58:06 +000090" ---------------------------------------------------------------------
91" Define the default highlighting. {{{1
Bram Moolenaarf37506f2016-08-31 22:22:10 +020092if !exists("skip_yacc_syn_inits")
Bram Moolenaar97d62492012-11-15 21:28:22 +010093 hi def link yaccBrkt yaccStmt
94 hi def link yaccComment Comment
95 hi def link yaccCurly Delimiter
96 hi def link yaccCurlyError Error
97 hi def link yaccDefines cDefine
98 hi def link yaccDelim Delimiter
99 hi def link yaccKeyActn Special
100 hi def link yaccKey yaccStmt
101 hi def link yaccNonterminal Function
102 hi def link yaccOper yaccStmt
103 hi def link yaccParseOption cDefine
104 hi def link yaccParseParam yaccParseOption
105 hi def link yaccSectionSep Todo
106 hi def link yaccSep Delimiter
107 hi def link yaccStmt Statement
108 hi def link yaccString String
109 hi def link yaccType Type
110 hi def link yaccUnionStart yaccKey
111 hi def link yaccVar Special
Bram Moolenaar071d4272004-06-13 20:20:40 +0000112endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100113
114" ---------------------------------------------------------------------
115" Cleanup: {{{1
Bram Moolenaar97d62492012-11-15 21:28:22 +0100116delcommand SynFold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000117let b:current_syntax = "yacc"
118
Bram Moolenaar8c8de832008-06-24 22:58:06 +0000119" ---------------------------------------------------------------------
120" Modelines: {{{1
121" vim: ts=15 fdm=marker