iup-stack/iup/etc/lexlua/dart.lua

58 lines
2.0 KiB
Lua
Raw Permalink Normal View History

2023-02-20 16:44:45 +00:00
-- Copyright 2013-2019 Mitchell mitchell.att.foicica.com. See License.txt.
-- Dart LPeg lexer.
-- Written by Brian Schott (@Hackerpilot on Github).
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('dart')
-- Whitespace.
lex:add_rule('whitespace', token(lexer.WHITESPACE, lexer.space^1))
-- Keywords.
lex:add_rule('keyword', token(lexer.KEYWORD, word_match[[
assert break case catch class const continue default do else enum extends
false final finally for if in is new null rethrow return super switch this
throw true try var void while with
]]))
-- Built-ins.
lex:add_rule('builtin', token(lexer.CONSTANT, word_match[[
abstract as dynamic export external factory get implements import library
operator part set static typedef
]]))
-- Strings.
local sq_str = S('r')^-1 * lexer.delimited_range("'", true)
local dq_str = S('r')^-1 * lexer.delimited_range('"', true)
local sq_str_multiline = S('r')^-1 * "'''" * (lexer.any - "'''")^0 * P("'''")^-1
local dq_str_multiline = S('r')^-1 * '"""' * (lexer.any - '"""')^0 * P('"""')^-1
lex:add_rule('string', token(lexer.STRING, sq_str_multiline + dq_str_multiline +
sq_str + dq_str))
-- Identifiers.
lex:add_rule('identifier', token(lexer.IDENTIFIER, lexer.word))
-- Comments.
lex:add_rule('comment', token(lexer.COMMENT, '//' * lexer.nonnewline_esc^0 +
lexer.nested_pair('/*', '*/')))
-- Numbers.
lex:add_rule('number', token(lexer.NUMBER, lexer.float + lexer.hex_num))
-- Operators.
lex:add_rule('operator', token(lexer.OPERATOR, S('#?=!<>+-*$/%&|^~.,;()[]{}')))
-- Annotations.
lex:add_rule('annotation', token('annotation', '@' * lexer.word^1))
lex:add_style('annotation', lexer.STYLE_PREPROCESSOR)
-- Fold points.
lex:add_fold_point(lexer.OPERATOR, '{', '}')
lex:add_fold_point(lexer.COMMENT, '/*', '*/')
lex:add_fold_point(lexer.COMMENT, '//', lexer.fold_line_comments('//'))
return lex