aboutsummaryrefslogtreecommitdiffhomepage
path: root/lexlua/logtalk.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lexlua/logtalk.lua')
-rw-r--r--lexlua/logtalk.lua84
1 files changed, 58 insertions, 26 deletions
diff --git a/lexlua/logtalk.lua b/lexlua/logtalk.lua
index 61f7d98ef..27b41b107 100644
--- a/lexlua/logtalk.lua
+++ b/lexlua/logtalk.lua
@@ -7,32 +7,64 @@ local P, R, S = lpeg.P, lpeg.R, lpeg.S
local lex = lexer.new('logtalk', {inherit = lexer.load('prolog')})
--- Add logtalk keywords to the prolog ones.
-lex:modify_rule('keyword', token(lexer.KEYWORD, word_match[[
- -- Logtalk "keywords" generated from Vim syntax highlighting file with Prolog
- -- keywords stripped since were building up on the Prolog lexer.
- abolish_category abolish_events abolish_object abolish_protocol after alias as
- before built_in calls category category_property coinductive complements
- complements_object conforms_to_protocol context create_category create_object
- create_protocol create_logtalk_flag current current_category current_event
- current_logtalk_flag current_object current_protocol define_events domain_error
- encoding end_category end_class end_object end_protocol evaluation_error
- existence_error extends extends_category extends_object extends_protocol forward
- implements implements_protocol imports imports_category include info instantiates
- instantiates_class instantiation_error is logtalk_compile logtalk_library_path
- logtalk_load logtalk_load_context logtalk_make logtalk_make_target_action
- meta_non_terminal mode object object_property parameter permission_error private
- protected protocol_property representation_error resource_error self sender
- set_logtalk_flag specializes specializes_class synchronized syntax_error
- system_error this threaded threaded_call threaded_cancel threaded_engine
- threaded_engine_create threaded_engine_destroy threaded_engine_fetch
- threaded_engine_next threaded_engine_next_reified threaded_engine_post
- threaded_engine_self threaded_engine_yield threaded_exit threaded_ignore
- threaded_notify threaded_once threaded_peek threaded_wait type_error uses
- -- info/1 and info/2 predicates have their own keywords manually extracted
- -- from documentation.
+-- add logtalk keywords to prolog ones
+local directives = [[
+ set_logtalk_flag object info built_in threaded uses alias use_module
+ coinductive export reexport public metapredicate mode meta_non_terminal
+ protected synchronized private module if elif else endif category protocol
+ end_object end_category end_protocol meta_predicate
+]]
+lex:modify_rule('directive',
+ (
+ token(lexer.WHITESPACE, lexer.starts_line(S(' \t'))^0) *
+ token(lexer.OPERATOR, P':-') *
+ token(lexer.WHITESPACE, (S(' \t')^0)) *
+ token(lexer.PREPROCESSOR, P(word_match(directives)))
+ ) +
+ lex:get_rule('directive')
+)
+
+-- Whitespace.
+lex:modify_rule('whitespace', token(lexer.WHITESPACE, lexer.space^1))
+
+local zero_arity_keywords = [[
+ -- extracted from test document in logtalk distribution
comment argnames arguments author version date parameters parnames copyright
- license remarks see_also
-]]) + lex:get_rule('keyword'))
+ license remarks see_also as logtalk_make instantiation_error system_error
+]]
+local one_plus_arity_keywords = [[
+ -- extracted from test document in logtalk distribution
+ implements imports extends instantiates specializes number_chars number_code
+ current_category current_object current_protocol create_category
+ create_object create_protocol abolish_category abolish_object
+ abolish_protocol category_property object_property protocol_property
+ extends_category extends_object extends_protocol implements_protocol
+ imports_category instantiates_class specializes_class complements_object
+ conforms_to_protocol abolish_events current_event define_events threaded
+ threaded_call threaded_call threaded_once threaded_ignore threaded_exit
+ threaded_peek threaded_cancel threaded_wait threaded_notify threaded_engine
+ threaded_engine_create threaded_engine_destroy threaded_engine_self
+ threaded_engine_next threaded_engine_next_reified threaded_engine_yield
+ threaded_engine_post threaded_engine_fetch logtalk_compile logtalk_load
+ logtalk_library_path logtalk_load_context logtalk_make_target_action
+ current_logtalk_flag set_logtalk_flag create_logtalk_flag context parameter
+ self sender this type_error domain_error existence_error permission_error
+ representation_error evaluation_error resource_error syntax_error bagof
+ findall forall setof before after forward phrase expand_term expand_goal
+ term_expansion goal_expansion numbervars put_code put_byte current_op op
+ ignore repeat number_codes current_prolog_flag set_prolog_flag keysort sort
+]]
+lex:modify_rule('keyword', token(lexer.KEYWORD,
+ word_match(zero_arity_keywords) +
+ (word_match(one_plus_arity_keywords) * #(P'('))) +
+ lex:get_rule('keyword')
+)
+
+local operators = [[
+ -- extracted from test document in logtalk distribution
+ as
+]]
+lex:modify_rule('operator', token(lexer.OPERATOR, word_match(operators)) +
+ lex:get_rule('operator'))
return lex