diff --git a/vim/.vim/ftdetect/antlr.vim b/vim/.vim/ftdetect/antlr.vim new file mode 100644 index 0000000..1773425 --- /dev/null +++ b/vim/.vim/ftdetect/antlr.vim @@ -0,0 +1,3 @@ +au BufRead,BufNewFile *.g set filetype=antlr3 +au BufRead,BufNewFile *.g4 set filetype=antlr4 + diff --git a/vim/.vim/syntax/antlr3.vim b/vim/.vim/syntax/antlr3.vim new file mode 100644 index 0000000..10e24e5 --- /dev/null +++ b/vim/.vim/syntax/antlr3.vim @@ -0,0 +1,91 @@ +" vim: ts=8 +" Vim syntax file +" Language: ANTLRv3 +" Maintainer: Jörn Horstmann (updated by Davyd Madeley) +" Last Change: 2008-11-21 + +" For version 5.x: Clear all syntax items +" For version 6.x: Quit when a syntax file was already loaded +if version < 600 + syntax clear +elseif exists("b:current_syntax") + finish +endif + +syn keyword antlrKeyword grammar lexer parser tree header members options fragment returns throws scope init + +syn match antlrCharacter '\\\(r\|n\|t\|f\|b\|"\|\'\|\\\|u\x\{4}\)' contained display + +syn match antlrToken "\<[A-Z_][a-zA-Z_0-9]\+\>" +syn match antlrRule "[a-z][a-zA-Z_0-9]\+" +syn match antlrScopeVariable '$\k\+::\k\+' + +syn match antlrOperator "[:;@.]" +syn match antlrOperator "[()]" +syn match antlrOperator "[?+*~|!]" +syn match antlrOperator "[->=^]" + +syn match antlrBrace "[{}]" +syn match antlrBrace "[\[\]]" +syn region antlrAction matchgroup=antlrBrace start="[{\[]" end="[}\]]" contains=antlrVariable,antlrLiteral,antlrComment +syn match antlrVariable contained "$[a-zA-Z][a-zA-Z_0-9]*" + +syn region antlrLiteral start=+'+ end=+'+ contains=antlrCharacter +syn region antlrLiteral start=+"+ end=+"+ contains=antlrCharacter + +syn region antlrComment start="/\*" end="\*/" +syn match antlrComment "//.*$" + +" Define the default highlighting. +" For version 5.7 and earlier: only when not done already +" For version 5.8 and later: only when an item doesn't have highlighting yet +if version >= 508 + if version < 508 + let did_antlr_syntax_inits = 1 + command -nargs=+ HiLink hi link + else + command -nargs=+ HiLink hi def link + endif + + HiLink antlrLiteral String + hi def antlrVariable term=bold cterm=bold gui=bold + HiLink antlrBrace Operator + HiLink antlrCharacter Special + HiLink antlrComment Comment + HiLink antlrOperator Operator + HiLink antlrKeyword Keyword + HiLink antlrToken PreProc + HiLink antlrScopeVariable Identifier + HiLink antlrRule Type + + delcommand HiLink +endif + +" try to figure out the target language +let target_languages = [] +" can we figure out from the file name +let extensions = split(expand('%:t'), '\.') +if len(extensions) >= 3 + " great.. the target language was provided via file name + call add(target_languages, tolower(extensions[-2])) +else + " no multiple extensions... have to figure out from the content + let buffer = join(getline(1, line('$')), "\n") + let antlr_options = matchstr(buffer, '\m\(\_s\|;\)options\_s\+{\_.\{-\}}') + call substitute(antlr_options, '\mlanguage\_s*=\_s*''\?\(.\{-\}\)''\?\_s*;', '\=add(target_languages, tolower(submatch(1)))', 'g') +endif +if exists('target_languages[-1]') + " the last defined target language takes precendece + let lang=target_languages[-1] + let syntax_file = findfile('syntax/' . lang . '.vim', &rtp, 1) + if syntax_file != '' + " if a valid syntax file was found only + let b:current_syntax = '' + unlet b:current_syntax + let region_name = '@' . lang . 'Language' + exe 'syntax include ' . region_name . ' ' . syntax_file + exe 'syntax region ' . lang . ' start="{" end="}" keepend contains=' . region_name + endif +endif + +let b:current_syntax = "antlr3" diff --git a/vim/.vim/syntax/antlr4.vim b/vim/.vim/syntax/antlr4.vim new file mode 100644 index 0000000..456076c --- /dev/null +++ b/vim/.vim/syntax/antlr4.vim @@ -0,0 +1,76 @@ +" vim: ts=8 +" Vim syntax file +" Language: ANTLRv4 +" Maintainer: Jörn Horstmann (updated by Dylon Edwards) +" Last Change: 2015-12-15 + +" For version 5.x: Clear all syntax items +" For version 6.x: Quit when a syntax file was already loaded +if version < 600 + syntax clear +elseif exists("b:current_syntax") + finish +endif + +syn keyword antlrKeyword import fragment lexer parser grammar returns locals throws catch finally mode options tokens header members init after channels mode protected public private + +syn keyword antlrReserved rule + +syn match antlrCharacter '\\\(r\|n\|t\|f\|b\|"\|\'\|\\\|u\x\{4}\)' contained display + +syn match antlrToken "\<[A-Z_][a-zA-Z_0-9]\+\>" +syn match antlrRule "[a-z][a-zA-Z_0-9]\+" +syn match antlrScopeVariable '$\k\+::\k\+' + +syn match antlrOperator "[:;@.]" +syn match antlrOperator "[()]" +syn match antlrOperator "[?+*~|!]" +syn match antlrOperator "[->=^]" + +syn match antlrBlock "[{}]" +syn region antlrAction matchgroup=antlrBlock start="{" end="}" contains=antlrVariable,antlrAction +syn match antlrVariable contained "$[a-zA-Z][a-zA-Z_0-9]*" + +syn include @JAVA syntax/java.vim +syn region ANTLR4EmbeddedJavaAction matchgroup=antlrBlock start="{" end="}" contains=@JAVA,antlrVariable containedin=antlrAction + +syn keyword antlrOperations pushMode popMode skip channel + +syn match antlrBrace "[\[\]]" +syn region antlrCharClass matchgroup=antlrBrace start="\[" end="\]" contains=antlrCharacter + +syn region antlrLiteral start=+'+ end=+'+ contains=antlrCharacter +syn region antlrLiteral start=+"+ end=+"+ contains=antlrCharacter + +syn region antlrComment start="/\*" end="\*/" +syn match antlrComment "//.*$" + +" Define the default highlighting. +" For version 5.7 and earlier: only when not done already +" For version 5.8 and later: only when an item doesn't have highlighting yet +if version >= 508 + if version < 508 + let did_antlr_syntax_inits = 1 + command -nargs=+ HiLink hi link + else + command -nargs=+ HiLink hi def link + endif + + HiLink antlrReserved Error + HiLink antlrOperations Identifier + HiLink antlrLiteral String + hi def antlrVariable term=bold cterm=bold gui=bold + HiLink antlrBrace Operator + HiLink antlrBlock Operator + HiLink antlrCharacter Special + HiLink antlrComment Comment + HiLink antlrOperator Operator + HiLink antlrKeyword Keyword + HiLink antlrToken PreProc + HiLink antlrScopeVariable Identifier + HiLink antlrRule Type + + delcommand HiLink +endif + +let b:current_syntax = "antlr4"