diff options
author | mitchell <unknown> | 2018-03-11 23:04:41 -0400 |
---|---|---|
committer | mitchell <unknown> | 2018-03-11 23:04:41 -0400 |
commit | 519b7328b66c4c84f03893a31e4be5ba6b1395f2 (patch) | |
tree | 2055cd79006357e94c185f341d0df17b9a8769eb /lexlua/erlang.lua | |
parent | c0373e036e965a70045971e2abc582cb4bf12a4e (diff) | |
download | scintilla-mirror-519b7328b66c4c84f03893a31e4be5ba6b1395f2.tar.gz |
Added optional Lua lexer support.
This support is disabled by default and must be enabled via compile-time option.
Diffstat (limited to 'lexlua/erlang.lua')
-rw-r--r-- | lexlua/erlang.lua | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/lexlua/erlang.lua b/lexlua/erlang.lua new file mode 100644 index 000000000..973601ab2 --- /dev/null +++ b/lexlua/erlang.lua @@ -0,0 +1,89 @@ +-- Copyright 2006-2018 Mitchell mitchell.att.foicica.com. See License.txt. +-- Erlang LPeg lexer. + +local lexer = require('lexer') +local token, word_match = lexer.token, lexer.word_match +local P, R, S = lpeg.P, lpeg.R, lpeg.S + +local lex = lexer.new('erlang') + +-- Whitespace. +lex:add_rule('whitespace', token(lexer.WHITESPACE, lexer.space^1)) + +-- Keywords. +lex:add_rule('keyword', token(lexer.KEYWORD, word_match[[ + after begin case catch cond end fun if let of query receive try when + -- Operators. + div rem or xor bor bxor bsl bsr and band not bnot badarg nocookie orelse + andalso false true +]])) + +-- Functions. +lex:add_rule('function', token(lexer.FUNCTION, word_match[[ + abs alive apply atom_to_list binary_to_list binary_to_term concat_binary date + disconnect_node element erase exit float float_to_list get get_keys + group_leader halt hd integer_to_list is_alive is_record length link + list_to_atom list_to_binary list_to_float list_to_integer list_to_pid + list_to_tuple load_module make_ref monitor_node node nodes now open_port + pid_to_list process_flag process_info process put register registered round + self setelement size spawn spawn_link split_binary statistics term_to_binary + throw time tl trunc tuple_to_list unlink unregister whereis + -- Others. + any atom binary bitstring byte constant function integer list map mfa + non_neg_integer number pid ports port_close port_info pos_integer reference + record + -- Erlang. + check_process_code delete_module get_cookie hash math module_loaded preloaded + processes purge_module set_cookie set_node + -- Math. + acos asin atan atan2 cos cosh exp log log10 min max pi pow power sin sinh sqrt + tan tanh +]])) + +-- Identifiers. +lex:add_rule('identifier', token(lexer.IDENTIFIER, lexer.lower * + ('_' + lexer.alnum)^0)) + +-- Variables. +lex:add_rule('variable', token(lexer.VARIABLE, P('_')^0 * lexer.upper * + ('_' + lexer.alnum)^0)) + +-- Directives. +lex:add_rule('directive', token('directive', '-' * word_match[[ + author behaviour behavior compile copyright define doc else endif export file + ifdef ifndef import include include_lib module record spec type undef +]])) +lex:add_style('directive', lexer.STYLE_PREPROCESSOR) + +-- Strings. +lex:add_rule('string', token(lexer.STRING, lexer.delimited_range("'", true) + + lexer.delimited_range('"') + + '$' * lexer.any * lexer.alnum^0)) + +-- Comments. +lex:add_rule('comment', token(lexer.COMMENT, '%' * lexer.nonnewline^0)) + +-- Numbers. +lex:add_rule('number', token(lexer.NUMBER, lexer.float + lexer.integer)) + +-- Operators. +lex:add_rule('operator', token(lexer.OPERATOR, S('-<>.;=/|+*:,!()[]{}'))) + +-- Preprocessor. +lex:add_rule('preprocessor', token(lexer.TYPE, '?' * lexer.word)) + +-- Records. +lex:add_rule('type', token(lexer.TYPE, '#' * lexer.word)) + +-- Fold points. +lex:add_fold_point(lexer.KEYWORD, 'case', 'end') +lex:add_fold_point(lexer.KEYWORD, 'fun', 'end') +lex:add_fold_point(lexer.KEYWORD, 'if', 'end') +lex:add_fold_point(lexer.KEYWORD, 'query', 'end') +lex:add_fold_point(lexer.KEYWORD, 'receive', 'end') +lex:add_fold_point(lexer.OPERATOR, '(', ')') +lex:add_fold_point(lexer.OPERATOR, '[', ']') +lex:add_fold_point(lexer.OPERATOR, '{', '}') +lex:add_fold_point(lexer.COMMENT, '%', lexer.fold_line_comments('%')) + +return lex |