1" Vim syntax file 2" Language: PCCTS 3" Maintainer: Scott Bigham <[email protected]> 4" Last Change: 10 Aug 1999 5 6" quit when a syntax file was already loaded 7if exists("b:current_syntax") 8 finish 9endif 10 11" Read the C++ syntax to start with 12syn include @cppTopLevel syntax/cpp.vim 13 14syn region pcctsAction matchgroup=pcctsDelim start="<<" end=">>?\=" contains=@cppTopLevel,pcctsRuleRef 15 16syn region pcctsArgBlock matchgroup=pcctsDelim start="\(>\s*\)\=\[" end="\]" contains=@cppTopLevel,pcctsRuleRef 17 18syn region pcctsString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=pcctsSpecialChar 19syn match pcctsSpecialChar "\\\\\|\\\"" contained 20 21syn region pcctsComment start="/\*" end="\*/" contains=cTodo 22syn match pcctsComment "//.*$" contains=cTodo 23 24syn region pcctsDirective start="^\s*#header\s\+<<" end=">>" contains=pcctsAction keepend 25syn match pcctsDirective "^\s*#parser\>.*$" contains=pcctsString,pcctsComment 26syn match pcctsDirective "^\s*#tokdefs\>.*$" contains=pcctsString,pcctsComment 27syn match pcctsDirective "^\s*#token\>.*$" contains=pcctsString,pcctsAction,pcctsTokenName,pcctsComment 28syn region pcctsDirective start="^\s*#tokclass\s\+[A-Z]\i*\s\+{" end="}" contains=pcctsString,pcctsTokenName 29syn match pcctsDirective "^\s*#lexclass\>.*$" contains=pcctsTokenName 30syn region pcctsDirective start="^\s*#errclass\s\+[^{]\+\s\+{" end="}" contains=pcctsString,pcctsTokenName 31syn match pcctsDirective "^\s*#pred\>.*$" contains=pcctsTokenName,pcctsAction 32 33syn cluster pcctsInRule contains=pcctsString,pcctsRuleName,pcctsTokenName,pcctsAction,pcctsArgBlock,pcctsSubRule,pcctsLabel,pcctsComment 34 35syn region pcctsRule start="\<[a-z][A-Za-z0-9_]*\>\(\s*\[[^]]*\]\)\=\(\s*>\s*\[[^]]*\]\)\=\s*:" end=";" contains=@pcctsInRule 36 37syn region pcctsSubRule matchgroup=pcctsDelim start="(" end=")\(+\|\*\|?\(\s*=>\)\=\)\=" contains=@pcctsInRule contained 38syn region pcctsSubRule matchgroup=pcctsDelim start="{" end="}" contains=@pcctsInRule contained 39 40syn match pcctsRuleName "\<[a-z]\i*\>" contained 41syn match pcctsTokenName "\<[A-Z]\i*\>" contained 42 43syn match pcctsLabel "\<\I\i*:\I\i*" contained contains=pcctsLabelHack,pcctsRuleName,pcctsTokenName 44syn match pcctsLabel "\<\I\i*:\"\([^\\]\|\\.\)*\"" contained contains=pcctsLabelHack,pcctsString 45syn match pcctsLabelHack "\<\I\i*:" contained 46 47syn match pcctsRuleRef "\$\I\i*\>" contained 48syn match pcctsRuleRef "\$\d\+\(\.\d\+\)\>" contained 49 50syn keyword pcctsClass class nextgroup=pcctsClassName skipwhite 51syn match pcctsClassName "\<\I\i*\>" contained nextgroup=pcctsClassBlock skipwhite skipnl 52syn region pcctsClassBlock start="{" end="}" contained contains=pcctsRule,pcctsComment,pcctsDirective,pcctsAction,pcctsException,pcctsExceptionHandler 53 54syn keyword pcctsException exception nextgroup=pcctsExceptionRuleRef skipwhite 55syn match pcctsExceptionRuleRef "\[\I\i*\]" contained contains=pcctsExceptionID 56syn match pcctsExceptionID "\I\i*" contained 57syn keyword pcctsExceptionHandler catch default 58syn keyword pcctsExceptionHandler NoViableAlt NoSemViableAlt 59syn keyword pcctsExceptionHandler MismatchedToken 60 61syn sync clear 62syn sync match pcctsSyncAction grouphere pcctsAction "<<" 63syn sync match pcctsSyncAction "<<\([^>]\|>[^>]\)*>>" 64syn sync match pcctsSyncRule grouphere pcctsRule "\<[a-z][A-Za-z0-9_]*\>\s*\[[^]]*\]\s*:" 65syn sync match pcctsSyncRule grouphere pcctsRule "\<[a-z][A-Za-z0-9_]*\>\(\s*\[[^]]*\]\)\=\s*>\s*\[[^]]*\]\s*:" 66 67" Define the default highlighting. 68" Only when an item doesn't have highlighting yet 69command -nargs=+ HiLink hi def link <args> 70 71HiLink pcctsDelim Special 72HiLink pcctsTokenName Identifier 73HiLink pcctsRuleName Statement 74HiLink pcctsLabelHack Label 75HiLink pcctsDirective PreProc 76HiLink pcctsString String 77HiLink pcctsComment Comment 78HiLink pcctsClass Statement 79HiLink pcctsClassName Identifier 80HiLink pcctsException Statement 81HiLink pcctsExceptionHandler Keyword 82HiLink pcctsExceptionRuleRef pcctsDelim 83HiLink pcctsExceptionID Identifier 84HiLink pcctsRuleRef Identifier 85HiLink pcctsSpecialChar SpecialChar 86 87delcommand HiLink 88 89let b:current_syntax = "pccts" 90 91" vim: ts=8 92