blob: d4bd0196b8b8f4ecd8d4a7ea5acded5e0b57d1d6 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: Yacc
Bram Moolenaar8c8de832008-06-24 22:58:06 +00003" Maintainer: Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
4" Last Change: Jan 09, 2008
5" Version: 5
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 Moolenaar8c8de832008-06-24 22:58:06 +000010" g:yacc_minlines : see :help :he syn-sync-minlines -- default 50
11" g:yacc_maxlines : see :help :he syn-sync-maxlines -- default 200
Bram Moolenaar071d4272004-06-13 20:20:40 +000012
Bram Moolenaar8c8de832008-06-24 22:58:06 +000013" ---------------------------------------------------------------------
14" For version 5.x: Clear all syntax items {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +000015" For version 6.x: Quit when a syntax file was already loaded
16if version < 600
17 syntax clear
18elseif exists("b:current_syntax")
19 finish
20endif
21
Bram Moolenaar8c8de832008-06-24 22:58:06 +000022" ---------------------------------------------------------------------
23" Read the C syntax to start with {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +000024if version >= 600
Bram Moolenaardf1bdc92006-02-23 21:32:16 +000025 if exists("g:yacc_uses_cpp")
Bram Moolenaar071d4272004-06-13 20:20:40 +000026 runtime! syntax/cpp.vim
27 else
28 runtime! syntax/c.vim
29 endif
Bram Moolenaardf1bdc92006-02-23 21:32:16 +000030elseif exists("g:yacc_uses_cpp")
Bram Moolenaar071d4272004-06-13 20:20:40 +000031 so <sfile>:p:h/cpp.vim
32else
33 so <sfile>:p:h/c.vim
34endif
35
Bram Moolenaar8c8de832008-06-24 22:58:06 +000036" ---------------------------------------------------------------------
37" Clusters {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +000038syn cluster yaccActionGroup contains=yaccDelim,cInParen,cTodo,cIncluded,yaccDelim,yaccCurlyError,yaccUnionCurly,yaccUnion,cUserLabel,cOctalZero,cCppOut2,cCppSkip,cErrInBracket,cErrInParen,cOctalError,cCommentStartError,cParenError
39syn cluster yaccUnionGroup contains=yaccKey,cComment,yaccCurly,cType,cStructure,cStorageClass,yaccUnionCurly
40
Bram Moolenaar8c8de832008-06-24 22:58:06 +000041" ---------------------------------------------------------------------
42" Yacc stuff {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +000043syn match yaccDelim "^\s*[:|;]"
44syn match yaccOper "@\d\+"
45
46syn match yaccKey "^\s*%\(token\|type\|left\|right\|start\|ident\|nonassoc\)\>"
47syn match yaccKey "\s%\(prec\|expect\)\>"
48syn match yaccKey "\$\(<[a-zA-Z_][a-zA-Z_0-9]*>\)\=[\$0-9]\+"
49syn keyword yaccKeyActn yyerrok yyclearin
50
51syn match yaccUnionStart "^%union" skipwhite skipnl nextgroup=yaccUnion
52syn region yaccUnion contained matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}" contains=@yaccUnionGroup
53syn region yaccUnionCurly contained matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}" contains=@yaccUnionGroup
54syn match yaccBrkt contained "[<>]"
55syn match yaccType "<[a-zA-Z_][a-zA-Z0-9_]*>" contains=yaccBrkt
Bram Moolenaardf1bdc92006-02-23 21:32:16 +000056syn match yaccDefinition "^[A-Za-z][A-Za-z0-9_]*\_s*:"
Bram Moolenaar071d4272004-06-13 20:20:40 +000057
Bram Moolenaar8c8de832008-06-24 22:58:06 +000058" ---------------------------------------------------------------------
59" special Yacc separators {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +000060syn match yaccSectionSep "^[ \t]*%%"
61syn match yaccSep "^[ \t]*%{"
62syn match yaccSep "^[ \t]*%}"
63
Bram Moolenaar8c8de832008-06-24 22:58:06 +000064" ---------------------------------------------------------------------
65" I'd really like to highlight just the outer {}. Any suggestions??? {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +000066syn match yaccCurlyError "[{}]"
67syn region yaccAction matchgroup=yaccCurly start="{" end="}" contains=ALLBUT,@yaccActionGroup
68
Bram Moolenaar8c8de832008-06-24 22:58:06 +000069" ---------------------------------------------------------------------
70" Yacc synchronization: {{{1
71if exists("g:yacc_maxlines")
72 exe "syn sync maxlines=".g:yacc_maxlines
73else
74 syn sync maxlines=200
75endif
76if exists("g:yacc_minlines")
77 exe "syn sync minlines=".g:yacc_minlines
78else
79 syn sync minlines=50
80endif
Bram Moolenaar071d4272004-06-13 20:20:40 +000081
Bram Moolenaar8c8de832008-06-24 22:58:06 +000082" ---------------------------------------------------------------------
83" Define the default highlighting. {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +000084" For version 5.7 and earlier: only when not done already
85" For version 5.8 and later: only when an item doesn't have highlighting yet
86if version >= 508 || !exists("did_yacc_syn_inits")
87 if version < 508
88 let did_yacchdl_syn_inits = 1
89 command -nargs=+ HiLink hi link <args>
90 else
91 command -nargs=+ HiLink hi def link <args>
92 endif
93
Bram Moolenaar8c8de832008-06-24 22:58:06 +000094 " Internal yacc highlighting links {{{2
Bram Moolenaar071d4272004-06-13 20:20:40 +000095 HiLink yaccBrkt yaccStmt
96 HiLink yaccKey yaccStmt
97 HiLink yaccOper yaccStmt
98 HiLink yaccUnionStart yaccKey
99
Bram Moolenaar8c8de832008-06-24 22:58:06 +0000100 " External yacc highlighting links {{{2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000101 HiLink yaccCurly Delimiter
102 HiLink yaccCurlyError Error
103 HiLink yaccDefinition Function
104 HiLink yaccDelim Function
105 HiLink yaccKeyActn Special
106 HiLink yaccSectionSep Todo
107 HiLink yaccSep Delimiter
108 HiLink yaccStmt Statement
109 HiLink yaccType Type
110
Bram Moolenaar8c8de832008-06-24 22:58:06 +0000111 " since Bram doesn't like my Delimiter :| {{{2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000112 HiLink Delimiter Type
113
114 delcommand HiLink
115endif
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