1 -- Copyright 2006-2015 Mitchell mitchell.att.foicica.com. See LICENSE.
2 -- VisualBasic LPeg lexer.
4 local l
= require('lexer')
5 local token
, word_match
= l
.token
, l
.word_match
6 local P
, R
, S
= lpeg
.P
, lpeg
.R
, lpeg
.S
8 local M
= {_NAME
= 'vbscript'}
11 local ws
= token(l
.WHITESPACE
, l
.space^
1)
14 local comment
= token(l
.COMMENT
, (P("'") + word_match({'rem'}, nil, true)) * l
.nonnewline^
0)
17 local string = token(l
.STRING
, l
.delimited_range('"', true, true))
20 local number = token(l
.NUMBER
, (l
.float
+ l
.integer
) * S('LlUuFf')^
-2)
23 local keyword
= token(l
.KEYWORD
, word_match({
25 'If', 'Then', 'Else', 'ElseIf', 'While', 'Wend', 'For', 'To', 'Each',
26 'In', 'Step', 'Case', 'Select', 'Return', 'Continue', 'Do',
27 'Until', 'Loop', 'Next', 'With', 'Exit',
29 'Mod', 'And', 'Not', 'Or', 'Xor', 'Is',
31 'Call', 'Class', 'Const', 'Dim', 'ReDim', 'Preserve', 'Function', 'Sub',
32 'Property', 'End', 'Set', 'Let', 'Get', 'New', 'Randomize', 'Option',
33 'Explicit', 'On', 'Error', 'Execute',
35 'Private', 'Public', 'Default',
37 'Empty', 'False', 'Nothing', 'Null', 'True'
41 local type = token(l
.TYPE
, word_match({
42 'Boolean', 'Byte', 'Char', 'Date', 'Decimal', 'Double', 'Long', 'Object',
43 'Short', 'Single', 'String'
47 local identifier
= token(l
.IDENTIFIER
, l
.word
)
50 local operator
= token(l
.OPERATOR
, S('=><+-*^&:.,_()'))
57 {'identifier', identifier
},
60 {'operator', operator
},