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 double-quotes.
:- object(" object_identifier [ "," object_relations ] ").":- end_object."," prototype_relations," non_prototype_relations:- category(" category_identifier [ "," category_relations ] ").":- end_category."," category_relations:- protocol(" protocol_identifier [ "," extends_protocols ] ").":- end_protocol."extends(" extended_protocols ")"extends(" extended_objects ")"extends(" extended_categories ")"implements(" implemented_protocols ")"imports(" imported_categories ")"instantiates(" instantiated_objects ")"specializes(" specialized_objects ")"complements(" complemented_objects ")"::" protocol_identifier," implemented_protocol_sequence[" implemented_protocol_sequence "]"::" protocol_identifier," extended_protocol_sequence[" extended_protocol_sequence "]"::" category_identifier," imported_category_sequence[" imported_category_sequence "]"::" object_identifier," extended_object_sequence[" extended_object_sequence "]"::" category_identifier," extended_category_sequence[" extended_category_sequence "]"::" object_identifier," instantiated_object_sequence |[" instantiated_object_sequence "]"::" object_identifier," specialized_object_sequence[" specialized_object_sequence "]"," complemented_object_sequence[" complemented_object_sequence "]"public" |protected" |private"," entity_identifier_sequence[" entity_identifier_sequence "]"," object_identifier_sequence[" object_identifier_sequence "]"," category_identifier_sequence[" category_identifier_sequence "]"," protocol_identifier_sequence[" protocol_identifier_sequence "]"(" atom ")"," source_file_name_sequence[" source_file_name_sequence "]":- encoding(" atom ")." |:- set_logtalk_flag(" atom "," nonvar ")." |:- if(" callable ")." |:- elif(" callable ")." |:- else." |:- endif.":- initialization(" callable ")." |:- built_in." |:- threaded." |:- dynamic." |:- uses(" object_identifier ")." |:- use_module(" module_identifier "," module_predicate_indicator_alias_list ")." |:- calls(" protocol_identifiers ")." |:- info(" entity_info_list ")." |:- set_logtalk_flag(" atom "," nonvar ")." |:- built_in." |:- dynamic." |:- uses(" object_identifier ")." |:- use_module(" module_identifier "," predicate_indicator_alias_list ")." |:- calls(" protocol_identifiers ")." |:- info(" entity_info_list ")." |:- set_logtalk_flag(" atom "," nonvar ")." |:- built_in." |:- dynamic." |:- info(" entity_info_list ")." |:- set_logtalk_flag(" atom "," nonvar ")." |:- alias(" entity_identifier "," predicate_indicator_alias_list ")." |:- alias(" entity_identifier "," non_terminal_indicator_alias_list ").":- synchronized(" predicate_indicator_term | non_terminal_indicator_term ").":- uses(" object_identifier "," predicate_indicator_alias_list ").":- 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(" predicate_mode_term | non_terminal_mode_term "," number_of_proofs ").":- meta_predicate(" meta_predicate_template_term ").":- meta_non_terminal(" meta_non_terminal_template_term ").":- info(" predicate_indicator | non_terminal_indicator "," predicate_info_list ").":- dynamic(" predicate_indicator_term | non_terminal_indicator_term ").":- discontiguous(" predicate_indicator_term | non_terminal_indicator_term ").":- multifile(" predicate_indicator_term ").":- coinductive(" predicate_indicator_term | coinductive_predicate_template_term ")."," predicate_indicator_sequence[" predicate_indicator_sequence "]"as" predicate_indicator |::" predicate_indicator |:" predicate_indicator," predicate_indicator_alias_sequence[" predicate_indicator_alias_sequence "]"as" predicate_indicator |:" predicate_indicator," module_predicate_indicator_alias_sequence[" module_predicate_indicator_alias_sequence "]"," non_terminal_indicator_sequence[" non_terminal_indicator_sequence "]"//" arityas" non_terminal_indicator::" non_terminal_indicator," non_terminal_indicator_alias_sequence[" non_terminal_indicator_alias_sequence "]"," coinductive_predicate_template_sequence[" coinductive_predicate_template_sequence "]"(" coinductive_mode_terms ")"," coinductive_mode_terms+" | "-"(" mode_terms ")"(" mode_terms ")"," mode_terms@" [ type ] | "+" [ type ] | "-" [ type ] | "?" [ type ]term" | "nonvar" | "var" |compound" | "ground" | "callable" | "list" |atomic" | "atom" |number" | "integer" | "float"object" | "category" | "protocol" |event"zero" | "zero_or_one" | "zero_or_more" | "one" | "one_or_more" | "error"," meta_predicate_template_sequence[" meta_predicate_template_sequence "]"::" atom "(" meta_predicate_specifiers ")" |::" atom "(" meta_predicate_specifiers ")" |(" meta_predicate_specifiers ")"," meta_predicate_specifiers::" | "^" |*"[]" |[" entity_info_item "is" nonvar "|" entity_info_list "]"comment" | "remarks" | author" | "version" | "date" | copyright" | "license" | parameters" | "parnames" | []" |[" predicate_info_item "is" nonvar "|" predicate_info_list "]"comment" | "remarks" | arguments" | "argnames" | redefinition" | "allocation" |examples" | "exceptions" | ::" head ":-" body |:" head ":-" body |::" messages[" message_to_object "]"::" messages^^" message(" message "," messages ")" |(" message ";" messages ")" |(" message "->" messages ")"{" callable "}" |{" callable "}"<<" goal/" lambda_parameters ">>" callable |/" callable |>>" callable{" conjunction of variables "}" |{" variable "}" |{}"[]"static" |dynamic" |built_in" |file(" atom ")" |file(" atom "," atom ")" |lines(" integer "," integer ")" |events" |source_data" |public(" predicate_indicator_list ")" |protected(" predicate_indicator_list ")" |private(" predicate_indicator_list ")" |declares(" predicate_indicator "," predicate_declaration_property_list ")" |defines(" predicate_indicator "," predicate_definition_property_list ")" |includes(" predicate_indicator "," object_identifier | category_identifier "," predicate_definition_property_list ")" |provides(" predicate_indicator "," object_identifier | category_identifier "," predicate_definition_property_list ")" |alias(" predicate_indicator "," predicate_alias_property_list ")" |calls(" predicate_called "," predicate_call_property_list ")" |number_of_clauses(" integer ")" |number_of_user_clauses(" integer ")"static" |dynamic" |built_in" |threaded" |file(" atom ")" |file(" atom "," atom ")" |lines(" integer "," integer ")" |context_switching_calls" |dynamic_declarations" |events" |source_data" |complements(" "allow" | "restrict" ")" |complements" |public(" predicate_indicator_list ")" |protected(" predicate_indicator_list ")" |private(" predicate_indicator_list ")" |declares(" predicate_indicator "," predicate_declaration_property_list ")" |defines(" predicate_indicator "," predicate_definition_property_list ")" |includes(" predicate_indicator "," object_identifier | category_identifier "," predicate_definition_property_list ")" |provides(" predicate_indicator "," object_identifier | category_identifier "," predicate_definition_property_list ")"alias(" predicate_indicator "," predicate_alias_property_list ")" |calls(" predicate_called "," predicate_call_property_list ")" |number_of_clauses(" integer ")" |number_of_user_clauses(" integer ")"static" |dynamic" |built_in" |source_data" |file(" atom ")" |file(" atom "," atom ")" |lines(" integer "," integer ")" |public(" predicate_indicator_list ")" |protected(" predicate_indicator_list ")" |private(" predicate_indicator_list ")" |declares(" predicate_indicator "," predicate_declaration_property_list ")" |alias(" predicate_indicator "," predicate_alias_property_list ")"[" predicate_declaration_property_sequence "]"," predicate_declaration_property_sequencestatic" | "dynamic" |scope(" scope ")" |private" | "protected" | "public" |coinductive" |multifile" |synchronized" |meta_predicate(" meta_predicate_template ")" |coinductive(" coinductive_predicate_template ")" |non_terminal(" non_terminal_indicator ")" |line_count(" integer ")" |mode(" predicate_mode_term | non_terminal_mode_term "," number_of_proofs ")" |info(" list ")"[" predicate_definition_property_sequence "]"," predicate_definition_property_sequenceauxiliary" |non_terminal(" non_terminal_indicator ")" |line_count(" integer ")" |number_of_clauses(" integer ")"[" predicate_alias_property_sequence "]"," predicate_alias_property_sequencefor(" predicate_indicator ")" |from(" entity_identifier ")" |non_terminal(" non_terminal_indicator ")" |line_count(" integer ")"^^" predicate_indicator |::" predicate_indicator |::" predicate_indicator |::" predicate_indicator |:" predicate_indicator |:" predicate_indicator[" predicate_call_property_sequence "]"," predicate_call_property_sequencecaller(" predicate_indicator ")" |line_count(" integer ")" |as(" predicate_indicator ")"static" | "dynamic" |scope(" scope ")" |private" | "protected" | "public" |logtalk" | "prolog" | "foreign" |coinductive(" coinductive_predicate_template ")" |multifile" |synchronized" |built_in" |declared_in(" entity_identifier ")" |defined_in(" object_identifier | category_identifier ")" |redefined_from(" object_identifier | category_identifier ")" |meta_predicate(" meta_predicate_template ")" |alias_of(" callable ")" |alias_declared_in(" entity_identifier ")" |non_terminal(" non_terminal_indicator ")" |mode(" predicate_mode_term | non_terminal_mode_term "," number_of_proofs ")" |info(" list ")" |number_of_clauses(" integer ")"declared_in(" entity_identifier "," integer ")" |defined_in(" object_identifier | category_identifier "," integer")" |redefined_from(" object_identifier | category_identifier "," integer")" |alias_declared_in(" entity_identifier "," integer")"