blob: 01e342ee29dd824a849ea90927c73ba92154abc1 [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 Moolenaarf37506f2016-08-31 22:22:10 +02004" Last Change: Aug 31, 2016
5" Version: 15
6" 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 Moolenaar97d62492012-11-15 21:28:22 +010046SynFold 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
47SynFold 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
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='^%%$' end='^%%$'me=e-2,re=e-2 contains=@yaccRulesCluster nextgroup=yaccEndCode skipwhite skipempty contained
51SynFold syn region yaccEndCode matchgroup=yaccSectionSep start='^%%$' 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="\*/"
75syn match yaccString "'[^']*'" contained
76
Bram Moolenaar071d4272004-06-13 20:20:40 +000077
Bram Moolenaar8c8de832008-06-24 22:58:06 +000078" ---------------------------------------------------------------------
79" I'd really like to highlight just the outer {}. Any suggestions??? {{{1
Bram Moolenaar5c736222010-01-06 20:54:52 +010080syn match yaccCurlyError "[{}]"
Bram Moolenaar97d62492012-11-15 21:28:22 +010081SynFold syn region yaccAction matchgroup=yaccCurly start="{" end="}" contains=@yaccCode,yaccVar contained
82syn match yaccVar '\$\d\+\|\$\$\|\$<\I\i*>\$\|\$<\I\i*>\d\+' containedin=cParen,cPreProc,cMulti contained
Bram Moolenaar071d4272004-06-13 20:20:40 +000083
Bram Moolenaar8c8de832008-06-24 22:58:06 +000084" ---------------------------------------------------------------------
85" Yacc synchronization: {{{1
Bram Moolenaar5c736222010-01-06 20:54:52 +010086syn sync fromstart
Bram Moolenaar071d4272004-06-13 20:20:40 +000087
Bram Moolenaar8c8de832008-06-24 22:58:06 +000088" ---------------------------------------------------------------------
89" Define the default highlighting. {{{1
Bram Moolenaarf37506f2016-08-31 22:22:10 +020090if !exists("skip_yacc_syn_inits")
Bram Moolenaar97d62492012-11-15 21:28:22 +010091 hi def link yaccBrkt yaccStmt
92 hi def link yaccComment Comment
93 hi def link yaccCurly Delimiter
94 hi def link yaccCurlyError Error
95 hi def link yaccDefines cDefine
96 hi def link yaccDelim Delimiter
97 hi def link yaccKeyActn Special
98 hi def link yaccKey yaccStmt
99 hi def link yaccNonterminal Function
100 hi def link yaccOper yaccStmt
101 hi def link yaccParseOption cDefine
102 hi def link yaccParseParam yaccParseOption
103 hi def link yaccSectionSep Todo
104 hi def link yaccSep Delimiter
105 hi def link yaccStmt Statement
106 hi def link yaccString String
107 hi def link yaccType Type
108 hi def link yaccUnionStart yaccKey
109 hi def link yaccVar Special
Bram Moolenaar071d4272004-06-13 20:20:40 +0000110endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100111
112" ---------------------------------------------------------------------
113" Cleanup: {{{1
Bram Moolenaar97d62492012-11-15 21:28:22 +0100114delcommand SynFold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000115let b:current_syntax = "yacc"
116
Bram Moolenaar8c8de832008-06-24 22:58:06 +0000117" ---------------------------------------------------------------------
118" Modelines: {{{1
119" vim: ts=15 fdm=marker