diff options
| author | mitchell <unknown> | 2019-09-20 18:07:13 -0400 |
|---|---|---|
| committer | mitchell <unknown> | 2019-09-20 18:07:13 -0400 |
| commit | 60643673a6f9f90332e3fb088afd0a0769d9b5f0 (patch) | |
| tree | ca7717edab7e7fa152b5d19fb6a43267f83881fb /lexlua/logtalk.lua | |
| parent | fe75f635a82e9d94b06f1946bbfafd425477d713 (diff) | |
| download | scintilla-mirror-60643673a6f9f90332e3fb088afd0a0769d9b5f0.tar.gz | |
lexlua: More updates to logtalk and prolog lexers.
Thanks to Michael Richter.
Diffstat (limited to 'lexlua/logtalk.lua')
| -rw-r--r-- | lexlua/logtalk.lua | 84 |
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 |
