1071d4279SBram Moolenaar" Vim syntax file 2071d4279SBram Moolenaar" Language: Yacc 3*1d9215b9SBram Moolenaar" Maintainer: Charles E. Campbell <[email protected]> 4723dd946SBram Moolenaar" Last Change: Mar 25, 2019 5*1d9215b9SBram Moolenaar" Version: 17 6f37506f6SBram Moolenaar" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_YACC 7071d4279SBram Moolenaar" 88c8de839SBram Moolenaar" Options: {{{1 9df1bdc92SBram Moolenaar" g:yacc_uses_cpp : if this variable exists, then C++ is loaded rather than C 10071d4279SBram Moolenaar 118c8de839SBram Moolenaar" --------------------------------------------------------------------- 125c73622aSBram Moolenaar" this version of syntax/yacc.vim requires 6.0 or later 135c73622aSBram Moolenaarif exists("b:current_syntax") 145c73622aSBram Moolenaar syntax clear 155c73622aSBram Moolenaarendif 165c73622aSBram Moolenaar 175c73622aSBram Moolenaar" --------------------------------------------------------------------- 185c73622aSBram Moolenaar" Folding Support {{{1 195c73622aSBram Moolenaarif has("folding") 2097d62497SBram Moolenaar com! -nargs=+ SynFold <args> fold 215c73622aSBram Moolenaarelse 2297d62497SBram Moolenaar com! -nargs=+ SynFold <args> 235c73622aSBram Moolenaarendif 24071d4279SBram Moolenaar 258c8de839SBram Moolenaar" --------------------------------------------------------------------- 268c8de839SBram Moolenaar" Read the C syntax to start with {{{1 2797d62497SBram Moolenaar" Read the C/C++ syntax to start with 2897d62497SBram Moolenaarlet s:Cpath= fnameescape(expand("<sfile>:p:h").(exists("g:yacc_uses_cpp")? "/cpp.vim" : "/c.vim")) 2997d62497SBram Moolenaarif !filereadable(s:Cpath) 3097d62497SBram Moolenaar for s:Cpath in split(globpath(&rtp,(exists("g:yacc_uses_cpp")? "syntax/cpp.vim" : "syntax/c.vim")),"\n") 3197d62497SBram Moolenaar if filereadable(fnameescape(s:Cpath)) 3297d62497SBram Moolenaar let s:Cpath= fnameescape(s:Cpath) 3397d62497SBram Moolenaar break 34071d4279SBram Moolenaar endif 3597d62497SBram Moolenaar endfor 3697d62497SBram Moolenaarendif 3797d62497SBram Moolenaarexe "syn include @yaccCode ".s:Cpath 38071d4279SBram Moolenaar 398c8de839SBram Moolenaar" --------------------------------------------------------------------- 405c73622aSBram Moolenaar" Yacc Clusters: {{{1 4181af9250SBram Moolenaarsyn cluster yaccInitCluster contains=yaccKey,yaccKeyActn,yaccBrkt,yaccType,yaccString,yaccUnionStart,yaccHeader2,yaccComment,yaccDefines,yaccParseParam,yaccParseOption 429da7ff70SBram Moolenaarsyn cluster yaccRulesCluster contains=yaccNonterminal,yaccString,yaccComment 43071d4279SBram Moolenaar 448c8de839SBram Moolenaar" --------------------------------------------------------------------- 455c73622aSBram Moolenaar" Yacc Sections: {{{1 46723dd946SBram MoolenaarSynFold 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 47723dd946SBram MoolenaarSynFold 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 4897d62497SBram MoolenaarSynFold syn region yaccHeader2 matchgroup=yaccSep start="^\s*\zs%{" end="^\s*%}" contains=@yaccCode nextgroup=yaccInit skipwhite skipempty contained 4997d62497SBram MoolenaarSynFold syn region yaccHeader matchgroup=yaccSep start="^\s*\zs%{" end="^\s*%}" contains=@yaccCode nextgroup=yaccInit skipwhite skipempty 50723dd946SBram MoolenaarSynFold syn region yaccRules matchgroup=yaccSectionSep start='^%%\ze\(\s*/[*/].*\)\=$' end='^%%\ze\(\s*/[*/].*\)\=$'me=e-2,re=e-2 contains=@yaccRulesCluster nextgroup=yaccEndCode skipwhite skipempty contained 51723dd946SBram MoolenaarSynFold syn region yaccEndCode matchgroup=yaccSectionSep start='^%%\ze\(\s*/[*/].*\)\=$' end='\%$' contains=@yaccCode contained 52071d4279SBram Moolenaar 538c8de839SBram Moolenaar" --------------------------------------------------------------------- 545c73622aSBram Moolenaar" Yacc Commands: {{{1 554b22cdb0SBram Moolenaarsyn match yaccDefines '^%define\s\+.*$' 5681af9250SBram Moolenaarsyn match yaccParseParam '%\(parse\|lex\)-param\>' skipwhite nextgroup=yaccParseParamStr 5781af9250SBram Moolenaarsyn match yaccParseOption '%\%(api\.pure\|pure-parser\|locations\|error-verbose\)\>' 584b22cdb0SBram Moolenaarsyn region yaccParseParamStr contained matchgroup=Delimiter start='{' end='}' contains=cStructure 594b22cdb0SBram Moolenaar 605c73622aSBram Moolenaarsyn match yaccDelim "[:|]" contained 615c73622aSBram Moolenaarsyn match yaccOper "@\d\+" contained 625c73622aSBram Moolenaar 635c73622aSBram Moolenaarsyn match yaccKey "^\s*%\(token\|type\|left\|right\|start\|ident\|nonassoc\)\>" contained 645c73622aSBram Moolenaarsyn match yaccKey "\s%\(prec\|expect\)\>" contained 655c73622aSBram Moolenaarsyn match yaccKey "\$\(<[a-zA-Z_][a-zA-Z_0-9]*>\)\=[\$0-9]\+" contained 665c73622aSBram Moolenaarsyn keyword yaccKeyActn yyerrok yyclearin contained 675c73622aSBram Moolenaar 685c73622aSBram Moolenaarsyn match yaccUnionStart "^%union" skipwhite skipnl nextgroup=yaccUnion contained 6997d62497SBram MoolenaarSynFold syn region yaccUnion matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}" contains=@yaccCode contained 705c73622aSBram Moolenaarsyn match yaccBrkt "[<>]" contained 715c73622aSBram Moolenaarsyn match yaccType "<[a-zA-Z_][a-zA-Z0-9_]*>" contains=yaccBrkt contained 725c73622aSBram Moolenaar 7397d62497SBram MoolenaarSynFold 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 745c73622aSBram Moolenaarsyn region yaccComment start="/\*" end="\*/" 75723dd946SBram Moolenaarsyn region yaccComment start="//" end="$" 765c73622aSBram Moolenaarsyn match yaccString "'[^']*'" contained 775c73622aSBram Moolenaar 78071d4279SBram Moolenaar 798c8de839SBram Moolenaar" --------------------------------------------------------------------- 808c8de839SBram Moolenaar" I'd really like to highlight just the outer {}. Any suggestions??? {{{1 81071d4279SBram Moolenaarsyn match yaccCurlyError "[{}]" 8297d62497SBram MoolenaarSynFold syn region yaccAction matchgroup=yaccCurly start="{" end="}" contains=@yaccCode,yaccVar contained 8397d62497SBram Moolenaarsyn match yaccVar '\$\d\+\|\$\$\|\$<\I\i*>\$\|\$<\I\i*>\d\+' containedin=cParen,cPreProc,cMulti contained 84071d4279SBram Moolenaar 858c8de839SBram Moolenaar" --------------------------------------------------------------------- 868c8de839SBram Moolenaar" Yacc synchronization: {{{1 875c73622aSBram Moolenaarsyn sync fromstart 88071d4279SBram Moolenaar 898c8de839SBram Moolenaar" --------------------------------------------------------------------- 908c8de839SBram Moolenaar" Define the default highlighting. {{{1 91f37506f6SBram Moolenaarif !exists("skip_yacc_syn_inits") 9297d62497SBram Moolenaar hi def link yaccBrkt yaccStmt 9397d62497SBram Moolenaar hi def link yaccComment Comment 9497d62497SBram Moolenaar hi def link yaccCurly Delimiter 9597d62497SBram Moolenaar hi def link yaccCurlyError Error 9697d62497SBram Moolenaar hi def link yaccDefines cDefine 9797d62497SBram Moolenaar hi def link yaccDelim Delimiter 9897d62497SBram Moolenaar hi def link yaccKeyActn Special 9997d62497SBram Moolenaar hi def link yaccKey yaccStmt 10097d62497SBram Moolenaar hi def link yaccNonterminal Function 10197d62497SBram Moolenaar hi def link yaccOper yaccStmt 10297d62497SBram Moolenaar hi def link yaccParseOption cDefine 10397d62497SBram Moolenaar hi def link yaccParseParam yaccParseOption 10497d62497SBram Moolenaar hi def link yaccSectionSep Todo 10597d62497SBram Moolenaar hi def link yaccSep Delimiter 10697d62497SBram Moolenaar hi def link yaccStmt Statement 10797d62497SBram Moolenaar hi def link yaccString String 10897d62497SBram Moolenaar hi def link yaccType Type 10997d62497SBram Moolenaar hi def link yaccUnionStart yaccKey 11097d62497SBram Moolenaar hi def link yaccVar Special 111071d4279SBram Moolenaarendif 1125c73622aSBram Moolenaar 1135c73622aSBram Moolenaar" --------------------------------------------------------------------- 1145c73622aSBram Moolenaar" Cleanup: {{{1 11597d62497SBram Moolenaardelcommand SynFold 116071d4279SBram Moolenaarlet b:current_syntax = "yacc" 117071d4279SBram Moolenaar 1188c8de839SBram Moolenaar" --------------------------------------------------------------------- 1198c8de839SBram Moolenaar" Modelines: {{{1 1208c8de839SBram Moolenaar" vim: ts=15 fdm=marker 121