Logtalk reference manual
 
Grammar
 
Grammar
The Logtalk grammar is here described using Backus-Naur Form syntax. Non-terminal symbols in italics have the definition found in the ISO Prolog Standard. Terminal symbols are represented in a fixed width font and between "".
Compilation units
	
		- entity ::=
- object |
- category |
- protocol
Object definition
	
		- object ::=
- begin_object_directive [object_directives] [clauses] end_object_directive.
		- begin_object_directive ::=
- ":- object(" object_identifier [ "," object_relations] ")."
		- end_object_directive ::=
- ":- end_object."
		- object_relations ::=
- prototype_relations |
- non_prototype_relations
		- prototype_relations ::=
- prototype_relation |
- prototype_relation "," prototype_relations
		- prototype_relation ::=
- implements_protocols |
- imports_categories |
- extends_objects
		- non_prototype_relations ::=
- non_prototype_relation |
- non_prototype_relation "," non_prototype_relations
		- non_prototype_relation ::=
- implements_protocols |
- imports_categories |
- instantiates_classes |
- specializes_classes
Category definition
	
		- category ::=
- begin_category_directive [category_directives] [clauses] end_category_directive.
		- begin_category_directive ::=
- ":- category(" category_identifier [ "," category_relations] ")."
		- end_category_directive ::=
- ":- end_category."
		- category_relations ::=
- category_relation |
- category_relation "," category_relations
		- category_relation ::=
- implements_protocols |
- imports_categories
Protocol definition
	
		- protocol ::=
- begin_protocol_directive [protocol_directives] end_protocol_directive.
		- begin_protocol_directive ::=
- ":- protocol(" protocol_identifier [ "," extends_protocols] ")."
		- end_protocol_directive ::=
- ":- end_protocol."
Entity relations
	
		- implements_protocols ::=
- "implements(" implemented_protocols ")"
		- extends_protocols ::=
- "extends(" extended_protocols ")"
		- imports_categories ::=
- "imports(" imported_categories ")"
		- extends_objects ::=
- "extends(" extended_objects ")"
		- instantiates_classes ::=
- "instantiates(" instantiated_objects ")"
		- specializes_classes ::=
- "specializes(" specialized_objects ")"
Implemented protocols
		
			- implemented_protocols ::=
- implemented_protocol |
- implemented_protocol_sequence |
- implemented_protocol_list
			- implemented_protocol ::=
- protocol_identifier |
- scope "::" protocol_identifier
			- implemented_protocol_sequence ::=
- implemented_protocol |
- implemented_protocol "," implemented_protocol_sequence
			- implemented_protocol_list ::=
- "[" implemented_protocol_sequence "]"
Extended protocols
		
			- extended_protocols ::=
- extended_protocol |
- extended_protocol_sequence |
- extended_protocol_list
			- extended_protocol ::=
- protocol_identifier |
- scope "::" protocol_identifier
			- extended_protocol_sequence ::=
- extended_protocol |
- extended_protocol "," extended_protocol_sequence
			- extended_protocol_list ::=
- "[" extended_protocol_sequence "]"
Imported categories
		
			- imported_categories ::=
- imported_category |
- imported_category_sequence |
- imported_category_list
			- imported_category ::=
- category_identifier |
- scope "::" category_identifier
			- imported_category_sequence ::=
- imported_category |
- imported_category "," imported_category_sequence
			- imported_category_list ::=
- "[" imported_category_sequence "]"
Extended objects
		
			- extended_objects ::=
- extended_object |
- extended_object_sequence |
- extended_object_list
			- extended_object ::=
- object_identifier |
- scope "::" object_identifier
			- extended_object_sequence ::=
- extended_object |
- extended_object "," extended_object_sequence
			- extended_object_list ::=
- "[" extended_object_sequence "]"
Instantiated objects
		
			- instantiated_objects ::=
- instantiated_object |
- instantiated_object_sequence |
- instantiated_object_list
			- instantiated_object ::=
- object_identifier |
- scope "::" object_identifier
			- instantiated_object_sequence ::=
- instantiated_object
- instantiated_object "," instantiated_object_sequence |
			- instantiated_object_list ::=
- "[" instantiated_object_sequence "]"
Specialized objects
		
			- specialized_objects ::=
- specialized_object |
- specialized_object_sequence |
- specialized_object_list
			- specialized_object ::=
- object_identifier |
- scope "::" object_identifier
			- specialized_object_sequence ::=
- specialized_object |
- specialized_object "," specialized_object_sequence
			- specialized_object_list ::=
- "[" specialized_object_sequence "]"
Entity scope
		
			- scope ::=
- "public" |
- "protected" |
- "private"
Entity identifiers
	
		- entity_identifiers ::=
- entity_identifier |
- entity_identifier_sequence |
- entity_identifier_list
		- entity_identifier ::=
- object_identifier |
- protocol_identifier |
- category_identifier
		- entity_identifier_sequence ::=
- entity_identifier |
- entity_identifier "," entity_identifier_sequence
		- entity_identifier_list ::=
- "[" entity_identifier_sequence "]"
Object identifiers
			
			- object_identifiers ::=
- object_identifier |
- object_identifier_sequence |
- object_identifier_list
			- object_identifier ::=
- atom |
- compound
			- object_identifier_sequence ::=
- object_identifier |
- object_identifier "," object_identifier_sequence
			- object_identifier_list ::=
- "[" object_identifier_sequence "]"
Category identifiers
			
			- category_identifiers ::=
- category_identifier |
- category_identifier_sequence |
- category_identifier_list
			- category_identifier ::=
- atom
			- category_identifier_sequence ::=
- category_identifier |
- category_identifier "," category_identifier_sequence
			- category_identifier_list ::=
- "[" category_identifier_sequence "]"
Protocol identifiers
			
			- protocol_identifiers ::=
- protocol_identifier |
- protocol_identifier_sequence |
- protocol_identifier_list
			- protocol_identifier ::=
- atom
			- protocol_identifier_sequence ::=
- protocol_identifier |
- protocol_identifier "," protocol_identifier_sequence
			- protocol_identifier_list ::=
- "[" protocol_identifier_sequence "]"
Source file names
	
		- source_file_names ::=
- source_file_name |
- source_file_name_list
		- source_file_name ::=
- atom |
- library_source_file_name
		- library_source_file_name ::=
- library_name "(" atom ")"
		- library_name ::=
- atom
			- source_file_name_sequence ::=
- source_file_name |
- source_file_name "," source_file_name_sequence
		- source_file_name_list ::=
- "[" source_file_name_sequence "]"
Directives
	Source file directives
			
			- source_file_directives ::=
- source_file_directive |
- source_file_directive source_file_directives
			- source_file_directive ::=
- ":- encoding(" atom ")." |
- initialization_directive |
- operator_directive
Object directives
			
			- object_directives ::=
- object_directive |
- object_directive object_directives
			- object_directive ::=
- initialization_directive |
- ":- threaded." |
- ":- synchronized." |
- ":- dynamic." |
- ":- uses(" object_identifier ")." |
- ":- calls(" protocol_identifiers ")." |
- ":- info(" info_list ")." |
- predicate_directives
Category directives
			
			- category_directives ::=
- category_directive |
- category_directive category_directives
			- category_directive ::=
- initialization_directive |
- ":- synchronized." |
- ":- dynamic." |
- ":- uses(" object_identifier ")." |
- ":- calls(" protocol_identifiers ")." |
- ":- info(" info_list ")." |
- predicate_directives
Protocol directives
			
			- protocol_directives ::=
- protocol_directive |
- protocol_directive protocol_directives
			- protocol_directive ::=
- initialization_directive |
- ":- dynamic." |
- ":- info(" info_list ")." |
- predicate_directives
Predicate directives
			
			- predicate_directives ::=
- predicate_directive |
- predicate_directive predicate_directives
			- predicate_directive ::=
- alias_directive |
- synchronized_directive |
- uses_directive |
- scope_directive |
- mode_directive |
- meta_predicate_directive |
- info_directive |
- dynamic_directive |
- discontiguous_directive |
- operator_directive
			- alias_directive ::=
- ":- alias(" entity_identifier "," predicate_indicator "," predicate_indicator ")." |
- ":- alias(" entity_identifier "," non_terminal_indicator "," non_terminal_indicator ")."
			- synchronized_directive ::=
- ":- synchronized(" predicate_indicator ")." |
- ":- synchronized(" non_terminal_indicator ")."
			- uses_directive ::=
- ":- uses(" object_identifier "," predicate_indicator_alias_list ")."
			- scope_directive ::=
- ":- public(" predicate_indicator_term | non_terminal_indicator_term ")." |
- ":- protected(" predicate_indicator_term | non_terminal_indicator_term ")." |
- ":- private(" predicate_indicator_term | non_terminal_indicator_term ")."
			- mode_directive ::=
- ":- mode(" predicate_mode_term | non_terminal_mode_term "," number_of_solutions ")."
			- meta_predicate_directive ::=
- ":- meta_predicate(" meta_predicate_mode_indicator ")."
			- info_directive ::=
- ":- info(" predicate_indicator | non_terminal_indicator "," info_list ")."
			- dynamic_directive ::=
- ":- dynamic(" predicate_indicator_term | non_terminal_indicator_term ")." |
			- discontiguous_directive ::=
- ":- discontiguous(" predicate_indicator_term | non_terminal_indicator_term ")." |
			- predicate_indicator_term ::=
- predicate_indicator |
- predicate_indicator_sequence |
- predicate_indicator_list
			- predicate_indicator_sequence ::=
- predicate_indicator |
- predicate_indicator "," predicate_indicator_sequence
			- predicate_indicator_list ::=
- "[" predicate_indicator_sequence "]"
			- predicate_indicator_alias ::=
- predicate_indicator |
- predicate_indicator "::" predicate_indicator
			- predicate_indicator_alias_sequence ::=
- predicate_indicator_alias |
- predicate_indicator_alias "," predicate_indicator_alias_sequence
			- predicate_indicator_alias_list ::=
- "[" predicate_indicator_alias_sequence "]"
			- non_terminal_indicator_term ::=
- non_terminal_indicator |
- non_terminal_indicator_sequence |
- non_terminal_indicator_list
			- non_terminal_indicator_sequence ::=
- non_terminal_indicator |
- non_terminal_indicator "," non_terminal_indicator_sequence
			- non_terminal_indicator_list ::=
- "[" non_terminal_indicator_sequence "]"
			- non_terminal_indicator ::=
- functor "//" arity
			- predicate_mode_term ::=
- atom "(" mode_terms ")"
			- non_terminal_mode_term ::=
- atom "(" mode_terms ")"
			- mode_terms ::=
- mode_term |
- mode_term "," mode_terms
			- mode_term ::=
- "@" [type] | "+" [type] | "-" [type] | "?" [type]
			- type ::=
- prolog_type | logtalk_type | user_defined_type
			- prolog_type ::=
- "term" | "nonvar" | "var" |
- "compound" | "ground" | "callable" | "list" |
- "atomic" | "atom" |
- "number" | "integer" | "float"
			- logtalk_type ::=
- "object" | "category" | "protocol" |
- "event"
			- user_defined_type ::=
- atom |
- compound
			- number_of_solutions ::=
- "zero" | "zero_or_one" | "zero_or_more" | "one" | "one_or_more" | "error"
			- meta_predicate_mode_indicator ::=
- atom "(" meta_predicate_terms ")"
			- meta_predicate_terms ::=
- meta_predicate_term |
- meta_predicate_term "," meta_predicate_terms
			- meta_predicate_term ::=
- "::" | "*" | integer
			- info_list ::=
- "[]" |
- "[" info_item "is" nonvar "|" info_list "]"
			- info_item ::=
- "comment" | "remarks" |
- "author" | "version" | "date" |
- "copyright" | "license" |
- "parameters" | "parnames" |
- "arguments" | "argnames" |
- "definition" | "redefinition" | "allocation" |
- "examples" | "exceptions" |
- atom
Clauses and goals
	
		- goal ::=
- message_call |
- external_call |
- callable
		- message_call ::=
- message_to_object |
- message_to_self |
- message_to_super
		- message_to_object ::=
- receivers "::" messages
		- message_to_self ::=
- "::" messages
		- message_to_super ::=
- "^^" message
		- messages ::=
- message |
- "(" message "," messages ")" |
- "(" message ";" messages ")"
		- message ::=
- callable |
- variable
		- receivers ::=
- receiver |
- "(" receiver "," receivers ")" |
- "(" receiver ";" receivers ")"
		- receiver ::=
- object_identifier |
- variable
		- external_call ::=
- "{" callable "}"
Entity properties
	
		- category_property ::=
- "static" |
- "dynamic" |
- "built_in" |
- "synchronized"
		- object_property ::=
- "static" |
- "dynamic" |
- "built_in" |
- "synchronized" |
- "threaded"
		- protocol_property ::=
- "static" |
- "dynamic" |
- "built_in"
Predicate properties
	
		- predicate_property ::=
- "static" |
- "dynamic" |
- "private" |
- "protected" |
- "public" |
- "synchronized" |
- "built_in" |
- "declared_in(" entity_identifier ")" |
- "defined_in(" object_identifier | category_identifier ")" |
- "meta_predicate(" meta_predicate_mode_indicator ")" |
- "alias(" callable ")" |
- "non_terminal(" non_terminal_indicator ")"