blob: 3aa01e8841389c1e810c4ff38b1e3cbbedd84372 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: Yacc
Bram Moolenaar1d9215b2020-01-25 13:27:42 +01003" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM>
Bram Moolenaar723dd942019-04-04 13:11:03 +02004" Last Change: Mar 25, 2019
Bram Moolenaar1d9215b2020-01-25 13:27:42 +01005" Version: 17
Bram Moolenaarf37506f2016-08-31 22:22:10 +02006" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_YACC
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 Moolenaar5c736222010-01-06 20:54:52 +010013if exists("b:current_syntax")
14 syntax clear
15endif
16
17" ---------------------------------------------------------------------
18" Folding Support {{{1
19if has("folding")
Bram Moolenaar97d62492012-11-15 21:28:22 +010020 com! -nargs=+ SynFold <args> fold
Bram Moolenaar5c736222010-01-06 20:54:52 +010021else
Bram Moolenaar97d62492012-11-15 21:28:22 +010022 com! -nargs=+ SynFold <args>
Bram Moolenaar071d4272004-06-13 20:20:40 +000023endif
24
Bram Moolenaar8c8de832008-06-24 22:58:06 +000025" ---------------------------------------------------------------------
26" Read the C syntax to start with {{{1
Bram Moolenaar97d62492012-11-15 21:28:22 +010027" Read the C/C++ syntax to start with
28let s:Cpath= fnameescape(expand("<sfile>:p:h").(exists("g:yacc_uses_cpp")? "/cpp.vim" : "/c.vim"))
29if !filereadable(s:Cpath)
30 for s:Cpath in split(globpath(&rtp,(exists("g:yacc_uses_cpp")? "syntax/cpp.vim" : "syntax/c.vim")),"\n")
31 if filereadable(fnameescape(s:Cpath))
32 let s:Cpath= fnameescape(s:Cpath)
33 break
34 endif
35 endfor
Bram Moolenaar071d4272004-06-13 20:20:40 +000036endif
Bram Moolenaar97d62492012-11-15 21:28:22 +010037exe "syn include @yaccCode ".s:Cpath
Bram Moolenaar071d4272004-06-13 20:20:40 +000038
Bram Moolenaar8c8de832008-06-24 22:58:06 +000039" ---------------------------------------------------------------------
Bram Moolenaar5c736222010-01-06 20:54:52 +010040" Yacc Clusters: {{{1
Bram Moolenaar81af9252010-12-10 20:35:50 +010041syn cluster yaccInitCluster contains=yaccKey,yaccKeyActn,yaccBrkt,yaccType,yaccString,yaccUnionStart,yaccHeader2,yaccComment,yaccDefines,yaccParseParam,yaccParseOption
Bram Moolenaar9da7ff72015-01-14 12:52:36 +010042syn cluster yaccRulesCluster contains=yaccNonterminal,yaccString,yaccComment
Bram Moolenaar071d4272004-06-13 20:20:40 +000043
Bram Moolenaar8c8de832008-06-24 22:58:06 +000044" ---------------------------------------------------------------------
Bram Moolenaar5c736222010-01-06 20:54:52 +010045" Yacc Sections: {{{1
Bram Moolenaar723dd942019-04-04 13:11:03 +020046SynFold 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
47SynFold 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
48SynFold syn region yaccHeader2 matchgroup=yaccSep start="^\s*\zs%{" end="^\s*%}" contains=@yaccCode nextgroup=yaccInit skipwhite skipempty contained
49SynFold syn region yaccHeader matchgroup=yaccSep start="^\s*\zs%{" end="^\s*%}" contains=@yaccCode nextgroup=yaccInit skipwhite skipempty
50SynFold syn region yaccRules matchgroup=yaccSectionSep start='^%%\ze\(\s*/[*/].*\)\=$' end='^%%\ze\(\s*/[*/].*\)\=$'me=e-2,re=e-2 contains=@yaccRulesCluster nextgroup=yaccEndCode skipwhite skipempty contained
51SynFold syn region yaccEndCode matchgroup=yaccSectionSep start='^%%\ze\(\s*/[*/].*\)\=$' end='\%$' contains=@yaccCode contained
Bram Moolenaar071d4272004-06-13 20:20:40 +000052
Bram Moolenaar8c8de832008-06-24 22:58:06 +000053" ---------------------------------------------------------------------
Bram Moolenaar5c736222010-01-06 20:54:52 +010054" Yacc Commands: {{{1
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020055syn match yaccDefines '^%define\s\+.*$'
Bram Moolenaar81af9252010-12-10 20:35:50 +010056syn match yaccParseParam '%\(parse\|lex\)-param\>' skipwhite nextgroup=yaccParseParamStr
57syn match yaccParseOption '%\%(api\.pure\|pure-parser\|locations\|error-verbose\)\>'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020058syn region yaccParseParamStr contained matchgroup=Delimiter start='{' end='}' contains=cStructure
59
Bram Moolenaar5c736222010-01-06 20:54:52 +010060syn match yaccDelim "[:|]" contained
61syn match yaccOper "@\d\+" contained
62
63syn match yaccKey "^\s*%\(token\|type\|left\|right\|start\|ident\|nonassoc\)\>" contained
64syn match yaccKey "\s%\(prec\|expect\)\>" contained
65syn match yaccKey "\$\(<[a-zA-Z_][a-zA-Z_0-9]*>\)\=[\$0-9]\+" contained
66syn keyword yaccKeyActn yyerrok yyclearin contained
67
68syn match yaccUnionStart "^%union" skipwhite skipnl nextgroup=yaccUnion contained
Bram Moolenaar97d62492012-11-15 21:28:22 +010069SynFold syn region yaccUnion matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}" contains=@yaccCode contained
Bram Moolenaar5c736222010-01-06 20:54:52 +010070syn match yaccBrkt "[<>]" contained
71syn match yaccType "<[a-zA-Z_][a-zA-Z0-9_]*>" contains=yaccBrkt contained
72
Bram Moolenaar97d62492012-11-15 21:28:22 +010073SynFold 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 +010074syn region yaccComment start="/\*" end="\*/"
Bram Moolenaar723dd942019-04-04 13:11:03 +020075syn region yaccComment start="//" end="$"
Bram Moolenaar5c736222010-01-06 20:54:52 +010076syn match yaccString "'[^']*'" contained
77
Bram Moolenaar071d4272004-06-13 20:20:40 +000078
Bram Moolenaar8c8de832008-06-24 22:58:06 +000079" ---------------------------------------------------------------------
80" I'd really like to highlight just the outer {}. Any suggestions??? {{{1
Bram Moolenaar5c736222010-01-06 20:54:52 +010081syn match yaccCurlyError "[{}]"
Bram Moolenaar97d62492012-11-15 21:28:22 +010082SynFold syn region yaccAction matchgroup=yaccCurly start="{" end="}" contains=@yaccCode,yaccVar contained
83syn match yaccVar '\$\d\+\|\$\$\|\$<\I\i*>\$\|\$<\I\i*>\d\+' containedin=cParen,cPreProc,cMulti contained
Bram Moolenaar071d4272004-06-13 20:20:40 +000084
Bram Moolenaar8c8de832008-06-24 22:58:06 +000085" ---------------------------------------------------------------------
86" Yacc synchronization: {{{1
Bram Moolenaar5c736222010-01-06 20:54:52 +010087syn sync fromstart
Bram Moolenaar071d4272004-06-13 20:20:40 +000088
Bram Moolenaar8c8de832008-06-24 22:58:06 +000089" ---------------------------------------------------------------------
90" Define the default highlighting. {{{1
Bram Moolenaarf37506f2016-08-31 22:22:10 +020091if !exists("skip_yacc_syn_inits")
Bram Moolenaar97d62492012-11-15 21:28:22 +010092 hi def link yaccBrkt yaccStmt
93 hi def link yaccComment Comment
94 hi def link yaccCurly Delimiter
95 hi def link yaccCurlyError Error
96 hi def link yaccDefines cDefine
97 hi def link yaccDelim Delimiter
98 hi def link yaccKeyActn Special
99 hi def link yaccKey yaccStmt
100 hi def link yaccNonterminal Function
101 hi def link yaccOper yaccStmt
102 hi def link yaccParseOption cDefine
103 hi def link yaccParseParam yaccParseOption
104 hi def link yaccSectionSep Todo
105 hi def link yaccSep Delimiter
106 hi def link yaccStmt Statement
107 hi def link yaccString String
108 hi def link yaccType Type
109 hi def link yaccUnionStart yaccKey
110 hi def link yaccVar Special
Bram Moolenaar071d4272004-06-13 20:20:40 +0000111endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100112
113" ---------------------------------------------------------------------
114" Cleanup: {{{1
Bram Moolenaar97d62492012-11-15 21:28:22 +0100115delcommand SynFold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000116let b:current_syntax = "yacc"
117
Bram Moolenaar8c8de832008-06-24 22:58:06 +0000118" ---------------------------------------------------------------------
119" Modelines: {{{1
120" vim: ts=15 fdm=marker