From 9e14d59368bf05aea92a04421f5e128d7a289923 Mon Sep 17 00:00:00 2001 From: mitchell Date: Tue, 17 Sep 2019 23:05:55 -0400 Subject: Updated Prolog and Logtalk lexers. Thanks to Michael Richter. --- lexlua/prolog.lua | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'lexlua/prolog.lua') diff --git a/lexlua/prolog.lua b/lexlua/prolog.lua index 4a45a5b31..373361b5a 100644 --- a/lexlua/prolog.lua +++ b/lexlua/prolog.lua @@ -110,20 +110,28 @@ lex:add_rule('keyword', token(lexer.KEYWORD, word_match[[ -- Identifiers. lex:add_rule('identifier', token(lexer.IDENTIFIER, lexer.word)) --- Strings. -lex:add_rule('string', token(lexer.STRING, lexer.delimited_range("'", true) + - lexer.delimited_range('"', true))) - -- Comments. local line_comment = '%' * lexer.nonnewline^0 local block_comment = '/*' * (lexer.any - '*/')^0 * P('*/')^-1 lex:add_rule('comment', token(lexer.COMMENT, line_comment + block_comment)) -- Numbers. -lex:add_rule('number', token(lexer.NUMBER, lexer.digit^1 * - ('.' * lexer.digit^1)^-1)) +local binary_number = '0b' * S('01')^1 +local character_code = '0\'' * S('\\')^-1 * (lexer.print - lexer.space) +local decimal_number = lexer.digit^1 * ('.' * lexer.digit)^-1 +local hexadecimal_number = '0x' * lexer.xdigit^1 +local octal_number = '0o' * S('01234567')^1 +lex:add_rule('number', token(lexer.NUMBER, character_code + + binary_number + + hexadecimal_number + + octal_number + + decimal_number)) + +-- Strings. +lex:add_rule('string', token(lexer.STRING, lexer.delimited_range("'", true) + + lexer.delimited_range('"', true))) -- Operators. -lex:add_rule('operator', token(lexer.OPERATOR, S('-!+\\|=:;&<>()[]{}'))) +lex:add_rule('operator', token(lexer.OPERATOR, S('-!+\\|=:;&<>()[]{}/*^@?'))) return lex -- cgit v1.2.3