99 lines
5.3 KiB
Lua
Executable File
99 lines
5.3 KiB
Lua
Executable File
-- Copyright 2006-2019 Mitchell mitchell.att.foicica.com. See License.txt.
|
|
-- Rebol 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('rebol')
|
|
|
|
-- Whitespace.
|
|
lex:add_rule('whitespace', token(lexer.WHITESPACE, lexer.space^1))
|
|
|
|
-- Comments.
|
|
local line_comment = ';' * lexer.nonnewline^0;
|
|
local block_comment = 'comment' * P(' ')^-1 *
|
|
lexer.delimited_range('{}', false, true)
|
|
lex:add_rule('comment', token(lexer.COMMENT, line_comment + block_comment))
|
|
|
|
-- Keywords.
|
|
lex:add_rule('keyword', token(lexer.KEYWORD, word_match[[
|
|
abs absolute add and~ at back change clear complement copy cp divide fifth
|
|
find first fourth head insert last make max maximum min minimum multiply
|
|
negate next or~ pick poke power random remainder remove second select skip
|
|
sort subtract tail third to trim xor~
|
|
alias all any arccosine arcsine arctangent bind break browse call
|
|
caret-to-offset catch checksum close comment compose compress cosine debase
|
|
decompress dehex detab dh-compute-key dh-generate-key dh-make-key difference
|
|
disarm do dsa-generate-key dsa-make-key dsa-make-signature
|
|
dsa-verify-signature either else enbase entab exclude exit exp foreach form
|
|
free get get-modes halt hide if in intersect load log-10 log-2 log-e loop
|
|
lowercase maximum-of minimum-of mold not now offset-to-caret open parse prin
|
|
print protect q query quit read read-io recycle reduce repeat return reverse
|
|
rsa-encrypt rsa-generate-key rsa-make-key save secure set set-modes show sine
|
|
size-text square-root tangent textinfo throw to-hex to-local-file
|
|
to-rebol-file trace try union unique unprotect unset until update uppercase
|
|
use wait while write write-io
|
|
basic-syntax-header crlf font-fixed font-sans-serif font-serif list-words
|
|
outstr val value
|
|
about alert alter append array ask boot-prefs build-tag center-face change-dir
|
|
charset choose clean-path clear-fields confine confirm context cvs-date
|
|
cvs-version decode-cgi decode-url deflag-face delete demo desktop dirize
|
|
dispatch do-boot do-events do-face do-face-alt does dump-face dump-pane echo
|
|
editor emailer emit extract find-by-type find-key-face find-window flag-face
|
|
flash focus for forall forever forskip func function get-net-info get-style
|
|
has help hide-popup import-email inform input insert-event-func join launch
|
|
launch-thru layout license list-dir load-image load-prefs load-thru make-dir
|
|
make-face net-error open-events parse-email-addrs parse-header
|
|
parse-header-date parse-xml path-thru probe protect-system read-net read-thru
|
|
reboot reform rejoin remold remove-event-func rename repend replace request
|
|
request-color request-date request-download request-file request-list
|
|
request-pass request-text resend save-prefs save-user scroll-para send
|
|
set-font set-net set-para set-style set-user set-user-name show-popup source
|
|
split-path stylize switch throw-on-error to-binary to-bitset to-block to-char
|
|
to-date to-decimal to-email to-event to-file to-get-word to-hash to-idate
|
|
to-image to-integer to-issue to-list to-lit-path to-lit-word to-logic to-money
|
|
to-none to-pair to-paren to-path to-refinement to-set-path to-set-word
|
|
to-string to-tag to-time to-tuple to-url to-word unfocus uninstall unview
|
|
upgrade Usage vbug view view-install view-prefs what what-dir write-user
|
|
return at space pad across below origin guide tabs indent style styles size
|
|
sense backcolor do none
|
|
action? any-block? any-function? any-string? any-type? any-word? binary?
|
|
bitset? block? char? datatype? date? decimal? email? empty? equal? error?
|
|
even? event? file? function? get-word? greater-or-equal? greater? hash? head?
|
|
image? index? integer? issue? length? lesser-or-equal? lesser? library? list?
|
|
lit-path? lit-word? logic? money? native? negative? none? not-equal? number?
|
|
object? odd? op? pair? paren? path? port? positive? refinement? routine? same?
|
|
series? set-path? set-word? strict-equal? strict-not-equal? string? struct?
|
|
tag? tail? time? tuple? unset? url? word? zero? connected? crypt-strength?
|
|
exists-key? input? script? type? value? ? ?? dir? exists-thru? exists?
|
|
flag-face? found? in-window? info? inside? link-app? link? modified? offset?
|
|
outside? screen-offset? size? span? view? viewed? win-offset? within?
|
|
action! any-block! any-function! any-string! any-type! any-word! binary!
|
|
bitset! block! char! datatype! date! decimal! email! error! event! file!
|
|
function! get-word! hash! image! integer! issue! library! list! lit-path!
|
|
lit-word! logic! money! native! none! number! object! op! pair! paren! path!
|
|
port! refinement! routine! series! set-path! set-word! string! struct! symbol!
|
|
tag! time! tuple! unset! url! word!
|
|
true false self
|
|
]]))
|
|
|
|
-- Identifiers.
|
|
lex:add_rule('identifier', token(lexer.IDENTIFIER, (lexer.alpha + '-') *
|
|
(lexer.alnum + '-')^0))
|
|
|
|
-- Strings.
|
|
lex:add_rule('string', token(lexer.STRING, lexer.delimited_range('"', true) +
|
|
lexer.delimited_range('{}') +
|
|
"'" * lexer.word))
|
|
|
|
-- Operators.
|
|
lex:add_rule('operator', token(lexer.OPERATOR, S('=<>+/*:()[]')))
|
|
|
|
-- Fold points.
|
|
lex:add_fold_point(lexer.COMMENT, '{', '}')
|
|
lex:add_fold_point(lexer.COMMENT, ';', lexer.fold_line_comments(';'))
|
|
lex:add_fold_point(lexer.OPERATOR, '[', ']')
|
|
|
|
return lex
|