miller/vim/syntax/mlr.vim
2021-11-12 12:49:55 -05:00

148 lines
5.7 KiB
VimL

" " Copyright 2021 John Kerl. All rights reserved.
" " Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
" "
" " mlr.vim: Vim syntax file for the Miller DSL.
"
if exists("b:current_syntax")
finish
endif
syn case match
" ----------------------------------------------------------------
" Goal: map the lexical elements of the Miller DSL grammar in mlr.bnf
" to Vim syntax options
" http://vimdoc.sourceforge.net/htmldoc/syntax.html
" ----------------------------------------------------------------
" ----------------------------------------------------------------
syn region mlrComment start="#" end="$"
syn region mlrString start=+"+ skip=+\\\\\|\\"+ end=+"+
syn keyword mlrBoolean true false
syn match mlrDecimalInt "\(\<[0-9][0-9]*\>\)"
syn match mlrHexadecimalInt "\(\<0x[0-9a-fA-F][0-9a-fA-F]*\>\)"
syn match mlrBinaryInt "\(\<0b[01][01]*\>\)"
syn match mlrFloat "\.[0-9][0-9]*"
syn match mlrFloat "[0-9][0-9]*\."
syn match mlrFloat "[0-9][0-9]*\.[0-9][0-9]*"
syn match mlrFloat "[0-9][0-9]*\.[0-9]*"
syn match mlrFloat "\([0-9][0-9]*[eE][0-9][0-9]*\)"
syn match mlrFloat "\([0-9][0-9]*[eE]-[0-9][0-9]*\)"
syn match mlrFloat "\([0-9][0-9]*\.[0-9]*[eE][0-9][0-9]*\)"
syn match mlrFloat "\([0-9][0-9]*\.[0-9]*[eE]-[0-9][0-9]*\)"
syn match mlrFloat "\([0-9]*\.[0-9][0-9]*[eE][0-9][0-9]*\)"
syn match mlrFloat "\([0-9]*\.[0-9][0-9]*[eE]-[0-9][0-9]*\)"
syn keyword mlrConstant M_PI M_E
syn keyword mlrContextVariable IPS IFS IRS OPS OFS ORS OFLATSEP NF NR FNR FILENAME FILENUM
syn keyword mlrENV ENV
syn keyword mlrType arr bool float int map num str var
syn keyword mlrKeyword begin do elif else end filter for if in while break continue return
syn keyword mlrKeyword func subr call dump edump
syn keyword mlrKeyword emit emitp emitf eprint eprintn print printn tee stdout stderr unset null
syn match mlrFieldName /\(\$\<[a-zA-Z_][a-zA-Z_0-9]*\>\)/
syn match mlrFieldName /\(\$\*\)/
syn match mlrOosvarName /\(@\<[a-zA-Z_][a-zA-Z_0-9]*\>\)/
syn match mlrOosvarName /\(@\*\)/
syn match mlrIdentifier /\(\<[a-zA-Z_][a-zA-Z_0-9]*\>\)/
syn match mlrFunctionCall /\(\<[a-zA-Z_][a-zA-Z_0-9]*\>\)[ \t]*(/
syn region mlrParen start='(' end=')' transparent
syn region mlrBlock start="{" end="}" transparent
" Trailing whitespace; space-tab
syn match mlrSpaceError display excludenl "\s\+$"
syn match mlrSpaceError display " \+\t"me=e-1
syn match mlrOperator /!/
syn match mlrOperator /%/
syn match mlrOperator /&/
syn match mlrOperator /\*/
syn match mlrOperator /+/
syn match mlrOperator /-/
syn match mlrOperator /\./
syn match mlrOperator /\//
syn match mlrOperator /:/
syn match mlrOperator /</
syn match mlrOperator />/
syn match mlrOperator /?/
syn match mlrOperator /\^/
syn match mlrOperator /|/
syn match mlrOperator /\~/
syn match mlrOperator /!=/
syn match mlrOperator /&&/
syn match mlrOperator /\*\*/
syn match mlrOperator /\.\*/
syn match mlrOperator /\.+/
syn match mlrOperator /\.+/
syn match mlrOperator /\.-/
syn match mlrOperator /\.-/
syn match mlrOperator /\.\//
syn match mlrOperator /\/\//
syn match mlrOperator /<</
syn match mlrOperator /<=/
syn match mlrOperator /==/
syn match mlrOperator /=\~/
syn match mlrOperator />=/
syn match mlrOperator />>/
syn match mlrOperator /??/
syn match mlrOperator /^^/
syn match mlrOperator /||/
syn match mlrOperator /!=\~/
syn match mlrOperator /\.\/\//
syn match mlrOperator />>>/
syn match mlrOperator /???/
syn match mlrOperator /%=/
syn match mlrOperator /&=/
syn match mlrOperator /\*=/
syn match mlrOperator /+=/
syn match mlrOperator /-=/
syn match mlrOperator /\.=/
syn match mlrOperator /\/=/
syn match mlrOperator /^=/
syn match mlrOperator /|=/
syn match mlrOperator /&&=/
syn match mlrOperator /\*\*=/
syn match mlrOperator /\/\/=/
syn match mlrOperator /<<=/
syn match mlrOperator />>=/
syn match mlrOperator /??=/
syn match mlrOperator /^^=/
syn match mlrOperator /||=/
syn match mlrOperator />>>=/
syn match mlrOperator /???=/
" ----------------------------------------------------------------
hi def link mlrConstant Constant
hi def link mlrString String
hi def link mlrBoolean Boolean
hi def link mlrNumber Number
hi def link mlrFloat Float
hi def link mlrInteger Number
hi def link mlrComment Comment
hi def link mlrKeyword Keyword
hi def link mlrContextVariable Keyword
hi def link mlrENV Keyword
hi def link mlrError Error
hi def link mlrSpecial Special
hi def link mlrType Type
hi def link mlrDecimalInt Number
hi def link mlrHexadecimalInt Number
hi def link mlrBinaryInt Number
hi def link mlrFieldName Special
hi def link mlrOosvarName Special
hi def link mlrIdentifier Identifier
hi def link mlrFunctionCall Type
hi def link mlrSpaceError Error
hi def link mlrOperator Operator
" ----------------------------------------------------------------
syn sync minlines=200
let b:current_syntax = "mlr"