Add antlr syntax support

This commit is contained in:
Akemi Izuko 2023-09-08 15:32:08 -06:00
parent b7b0e8ec2e
commit 09c66e71cf
Signed by: akemi
GPG key ID: 8DE0764E1809E9FC
3 changed files with 170 additions and 0 deletions

View file

@ -0,0 +1,3 @@
au BufRead,BufNewFile *.g set filetype=antlr3
au BufRead,BufNewFile *.g4 set filetype=antlr4

View file

@ -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 <args>
else
command -nargs=+ HiLink hi def link <args>
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"

View file

@ -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 <args>
else
command -nargs=+ HiLink hi def link <args>
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"