Merged from the latest developing branch.
[MacVim/jjgod.git] / runtime / syntax / yacc.vim
blobaef02b53c4710f9325f52ce5677c9816cf2e6453
1 " Vim syntax file
2 " Language:     Yacc
3 " Maintainer:   Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
4 " Last Change:  Feb 22, 2006
5 " Version:      4
6 " URL:  http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
8 " Option:
9 "   g:yacc_uses_cpp : if this variable exists, then C++ is loaded rather than C
11 " For version 5.x: Clear all syntax items
12 " For version 6.x: Quit when a syntax file was already loaded
13 if version < 600
14   syntax clear
15 elseif exists("b:current_syntax")
16   finish
17 endif
19 " Read the C syntax to start with
20 if version >= 600
21   if exists("g:yacc_uses_cpp")
22     runtime! syntax/cpp.vim
23   else
24     runtime! syntax/c.vim
25   endif
26 elseif exists("g:yacc_uses_cpp")
27   so <sfile>:p:h/cpp.vim
28 else
29   so <sfile>:p:h/c.vim
30 endif
32 " Clusters
33 syn cluster     yaccActionGroup contains=yaccDelim,cInParen,cTodo,cIncluded,yaccDelim,yaccCurlyError,yaccUnionCurly,yaccUnion,cUserLabel,cOctalZero,cCppOut2,cCppSkip,cErrInBracket,cErrInParen,cOctalError,cCommentStartError,cParenError
34 syn cluster     yaccUnionGroup  contains=yaccKey,cComment,yaccCurly,cType,cStructure,cStorageClass,yaccUnionCurly
36 " Yacc stuff
37 syn match       yaccDelim       "^\s*[:|;]"
38 syn match       yaccOper        "@\d\+"
40 syn match       yaccKey "^\s*%\(token\|type\|left\|right\|start\|ident\|nonassoc\)\>"
41 syn match       yaccKey "\s%\(prec\|expect\)\>"
42 syn match       yaccKey "\$\(<[a-zA-Z_][a-zA-Z_0-9]*>\)\=[\$0-9]\+"
43 syn keyword     yaccKeyActn     yyerrok yyclearin
45 syn match       yaccUnionStart  "^%union"       skipwhite skipnl nextgroup=yaccUnion
46 syn region      yaccUnion       contained matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}"   contains=@yaccUnionGroup
47 syn region      yaccUnionCurly  contained matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}" contains=@yaccUnionGroup
48 syn match       yaccBrkt        contained "[<>]"
49 syn match       yaccType        "<[a-zA-Z_][a-zA-Z0-9_]*>"      contains=yaccBrkt
50 syn match       yaccDefinition  "^[A-Za-z][A-Za-z0-9_]*\_s*:"
52 " special Yacc separators
53 syn match       yaccSectionSep  "^[ \t]*%%"
54 syn match       yaccSep "^[ \t]*%{"
55 syn match       yaccSep "^[ \t]*%}"
57 " I'd really like to highlight just the outer {}.  Any suggestions???
58 syn match       yaccCurlyError  "[{}]"
59 syn region      yaccAction      matchgroup=yaccCurly start="{" end="}" contains=ALLBUT,@yaccActionGroup
62 " Define the default highlighting.
63 " For version 5.7 and earlier: only when not done already
64 " For version 5.8 and later: only when an item doesn't have highlighting yet
65 if version >= 508 || !exists("did_yacc_syn_inits")
66   if version < 508
67     let did_yacchdl_syn_inits = 1
68     command -nargs=+ HiLink hi link <args>
69   else
70     command -nargs=+ HiLink hi def link <args>
71   endif
73   " Internal yacc highlighting links
74   HiLink yaccBrkt       yaccStmt
75   HiLink yaccKey        yaccStmt
76   HiLink yaccOper       yaccStmt
77   HiLink yaccUnionStart yaccKey
79   " External yacc highlighting links
80   HiLink yaccCurly      Delimiter
81   HiLink yaccCurlyError Error
82   HiLink yaccDefinition Function
83   HiLink yaccDelim      Function
84   HiLink yaccKeyActn    Special
85   HiLink yaccSectionSep Todo
86   HiLink yaccSep        Delimiter
87   HiLink yaccStmt       Statement
88   HiLink yaccType       Type
90   " since Bram doesn't like my Delimiter :|
91   HiLink Delimiter      Type
93   delcommand HiLink
94 endif
96 let b:current_syntax = "yacc"
98 " vim: ts=15