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 Core standard. Terminal symbols are represented in a
fixed width font
and between double-quotes.
Entities
entity ::=
object |
category |
protocol
Object definition
object ::=
begin_object_directive [ object_terms ] 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_relationsprototype_relation ::=
implements_protocols |
imports_categories |
extends_objects
non_prototype_relations ::=
non_prototype_relation |
non_prototype_relation “
,
” non_prototype_relationsnon_prototype_relation ::=
implements_protocols |
imports_categories |
instantiates_classes |
specializes_classes
Category definition
category ::=
begin_category_directive [ category_terms ] end_category_directive.
begin_category_directive ::=
“
:- category(
” category_identifier [ “,
” category_relations ] “).
”end_category_directive ::=
“
:- end_category.
”category_relations ::=
category_relation |
category_relation “
,
” category_relationscategory_relation ::=
implements_protocols |
extends_categories |
complements_objects
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
extends_protocols ::=
“
extends(
” extended_protocols “)
”extends_objects ::=
“
extends(
” extended_objects “)
”extends_categories ::=
“
extends(
” extended_categories “)
”implements_protocols ::=
“
implements(
” implemented_protocols “)
”imports_categories ::=
“
imports(
” imported_categories “)
”instantiates_classes ::=
“
instantiates(
” instantiated_objects “)
”specializes_classes ::=
“
specializes(
” specialized_objects “)
”complements_objects ::=
“
complements(
” complemented_objects “)
”Implemented protocols
implemented_protocols ::=
implemented_protocol |
implemented_protocol_sequence |
implemented_protocol_list
implemented_protocol ::=
protocol_identifier |
scope “
::
” protocol_identifierimplemented_protocol_sequence ::=
implemented_protocol |
implemented_protocol “
,
” implemented_protocol_sequenceimplemented_protocol_list ::=
“
[
” implemented_protocol_sequence “]
”Extended protocols
extended_protocols ::=
extended_protocol |
extended_protocol_sequence |
extended_protocol_list
extended_protocol ::=
protocol_identifier |
scope “
::
” protocol_identifierextended_protocol_sequence ::=
extended_protocol |
extended_protocol “
,
” extended_protocol_sequenceextended_protocol_list ::=
“
[
” extended_protocol_sequence “]
”Imported categories
imported_categories ::=
imported_category |
imported_category_sequence |
imported_category_list
imported_category ::=
category_identifier |
scope “
::
” category_identifierimported_category_sequence ::=
imported_category |
imported_category “
,
” imported_category_sequenceimported_category_list ::=
“
[
” imported_category_sequence “]
”Extended objects
extended_objects ::=
extended_object |
extended_object_sequence |
extended_object_list
extended_object ::=
object_identifier |
scope “
::
” object_identifierextended_object_sequence ::=
extended_object |
extended_object “
,
” extended_object_sequenceextended_object_list ::=
“
[
” extended_object_sequence “]
”Extended categories
extended_categories ::=
extended_category |
extended_category_sequence |
extended_category_list
extended_category ::=
category_identifier |
scope “
::
” category_identifierextended_category_sequence ::=
extended_category |
extended_category “
,
” extended_category_sequenceextended_category_list ::=
“
[
” extended_category_sequence “]
”Instantiated objects
instantiated_objects ::=
instantiated_object |
instantiated_object_sequence |
instantiated_object_list
instantiated_object ::=
object_identifier |
scope “
::
” object_identifierinstantiated_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_identifierspecialized_object_sequence ::=
specialized_object |
specialized_object “
,
” specialized_object_sequencespecialized_object_list ::=
“
[
” specialized_object_sequence “]
”Complemented objects
complemented_objects ::=
object_identifier |
complemented_object_sequence |
complemented_object_list
complemented_object_sequence ::=
object_identifier |
object_identifier “
,
” complemented_object_sequencecomplemented_object_list ::=
“
[
” complemented_object_sequence “]
”Entity and predicate 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_sequenceentity_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_sequenceobject_identifier_list ::=
“
[
” object_identifier_sequence “]
”Category identifiers
category_identifiers ::=
category_identifier |
category_identifier_sequence |
category_identifier_list
category_identifier ::=
atom |
compound
category_identifier_sequence ::=
category_identifier |
category_identifier “
,
” category_identifier_sequencecategory_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_sequenceprotocol_identifier_list ::=
“
[
” protocol_identifier_sequence “]
”Module identifiers
module_identifier ::=
atom
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_sequencesource_file_name_list ::=
“
[
” source_file_name_sequence “]
”Terms
Object terms
object_terms ::=
object_term |
object_term object_terms
object_term ::=
object_directive |
clause |
grammar_rule
Category terms
category_terms ::=
category_term |
category_term category_terms
category_term ::=
category_directive |
clause |
grammar_rule
Directives
Source file directives
source_file_directives ::=
source_file_directive |
source_file_directive source_file_directives
source_file_directive ::=
“
:- encoding(
” atom “).
” |“
:- set_logtalk_flag(
” atom “,
” nonvar “).
” |“
:- include(
” source_file_name “).
”Prolog directives
Conditional compilation directives
conditional_compilation_directives ::=
conditional_compilation_directive |
conditional_compilation_directive conditional_compilation_directives
conditional_compilation_directive ::=
“
:- if(
” callable “).
” |“
:- elif(
” callable “).
” |“
:- else.
” |“
:- endif.
”Object directives
object_directives ::=
object_directive |
object_directive object_directives
object_directive ::=
“
:- initialization(
” callable “).
” |“
:- built_in.
” |“
:- threaded.
” |“
:- dynamic.
” |“
:- info(
” entity_info_list “).
” |“
:- set_logtalk_flag(
” atom “,
” nonvar “).
” |“
:- include(
” source_file_name “).
” |“
:- uses(
” object_alias_list “).
” |predicate_directives
Category directives
category_directives ::=
category_directive |
category_directive category_directives
category_directive ::=
“
:- built_in.
” |“
:- dynamic.
” |“
:- info(
” entity_info_list “).
” |“
:- set_logtalk_flag(
” atom “,
” nonvar “).
” |“
:- include(
” source_file_name “).
” |“
:- uses(
” object_alias_list “).
” |predicate_directives
Protocol directives
protocol_directives ::=
protocol_directive |
protocol_directive protocol_directives
protocol_directive ::=
“
:- built_in.
” |“
:- dynamic.
” |“
:- info(
” entity_info_list “).
” |“
:- set_logtalk_flag(
” atom “,
” nonvar “).
” |“
:- include(
” source_file_name “).
” |predicate_directives
Predicate directives
predicate_directives ::=
predicate_directive |
predicate_directive predicate_directives
predicate_directive ::=
alias_directive |
synchronized_directive |
uses_directive |
use_module_directive |
scope_directive |
mode_directive |
meta_predicate_directive |
meta_non_terminal_directive |
info_directive |
dynamic_directive |
discontiguous_directive |
multifile_directive |
coinductive_directive |
operator_directive
alias_directive ::=
“
:- alias(
”entity_identifier “
,
”predicate_indicator_alias_list | non_terminal_indicator_alias_list
“
).
”synchronized_directive ::=
“
:- synchronized(
” predicate_indicator_term | non_terminal_indicator_term “).
”uses_directive ::=
“
:- uses(
”object_identifier | parameter_variable “
,
”predicate_indicator_alias_list | non_terminal_indicator_alias_list | operator_list
“
).
”use_module_directive ::=
“
:- use_module(
”module_identifier | parameter_variable “
,
”module_predicate_indicator_alias_list | module_non_terminal_indicator_alias_list | operator_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_proofs
“
).
”meta_predicate_directive ::=
“
:- meta_predicate(
” meta_predicate_template_term “).
”meta_non_terminal_directive ::=
“
:- meta_non_terminal(
” meta_non_terminal_template_term “).
”info_directive ::=
“
:- info(
”predicate_indicator | non_terminal_indicator “
,
”predicate_info_list
“
).
”dynamic_directive ::=
“
:- dynamic(
” qualified_predicate_indicator_term | qualified_non_terminal_indicator_term “).
”discontiguous_directive ::=
“
:- discontiguous(
” predicate_indicator_term |non_terminal_indicator_term “
).
”multifile_directive ::=
“
:- multifile(
” qualified_predicate_indicator_term |qualified_non_terminal_indicator_term “
).
”coinductive_directive ::=
“
:- coinductive(
” predicate_indicator_term |coinductive_predicate_template_term “
).
”parameter_variable ::=
_variable_
entity_resources_list ::=
predicate_indicator_list |
operator_list
predicate_indicator_term ::=
predicate_indicator |
predicate_indicator_sequence |
predicate_indicator_list
predicate_indicator_sequence ::=
predicate_indicator |
predicate_indicator “
,
” predicate_indicator_sequencepredicate_indicator_list ::=
“
[
” predicate_indicator_sequence “]
”qualified_predicate_indicator_term ::=
qualified_predicate_indicator |
qualified_predicate_indicator_sequence |
qualified_predicate_indicator_list
qualified_predicate_indicator_sequence ::=
qualified_predicate_indicator |
qualified_predicate_indicator “
,
” qualified_predicate_indicator_sequencequalified_predicate_indicator_list ::=
“
[
” qualified_predicate_indicator_sequence “]
”qualified_predicate_indicator ::=
predicate_indicator |
object_identifier “
::
” predicate_indicator |category_identifier “
::
” predicate_indicator |module_identifier “
:
” predicate_indicatorpredicate_indicator_alias ::=
predicate_indicator |
predicate_indicator “
as
” predicate_indicator |predicate_indicator “
::
” predicate_indicatorpredicate_indicator_alias_sequence ::=
predicate_indicator_alias |
predicate_indicator_alias “
,
” predicate_indicator_alias_sequencepredicate_indicator_alias_list ::=
“
[
” predicate_indicator_alias_sequence “]
”predicate_template_alias ::=
callable “
as
” callable |callable “
::
” callablepredicate_template_alias_sequence ::=
predicate_template_alias |
predicate_template_alias “
,
” predicate_template_alias_sequencepredicate_template_alias_list ::=
“
[
” predicate_template_alias_sequence “]
”module_predicate_indicator_alias ::=
predicate_indicator |
predicate_indicator “
as
” predicate_indicator |predicate_indicator “
:
” predicate_indicatormodule_predicate_indicator_alias_sequence ::=
module_predicate_indicator_alias |
module_predicate_indicator_alias “
,
” module_predicate_indicator_alias_sequencemodule_predicate_indicator_alias_list ::=
“
[
” module_predicate_indicator_alias_sequence “]
”module_non_terminal_indicator_alias ::=
non_terminal_indicator |
non_terminal_indicator “
as
” non_terminal_indicatornon_terminal_indicator “
:
” non_terminal_indicatormodule_non_terminal_indicator_alias_sequence ::=
module_non_terminal_indicator_alias |
module_non_terminal_indicator_alias “
,
” module_non_terminal_indicator_alias_sequencemodule_non_terminal_indicator_alias_list ::=
“
[
” module_non_terminal_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_sequencenon_terminal_indicator_list ::=
“
[
” non_terminal_indicator_sequence “]
”non_terminal_indicator ::=
functor “
//
” arityqualified_non_terminal_indicator_term ::=
qualified_non_terminal_indicator |
qualified_non_terminal_indicator_sequence |
qualified_non_terminal_indicator_list
qualified_non_terminal_indicator_sequence ::=
qualified_non_terminal_indicator |
qualified_non_terminal_indicator “
,
” qualified_non_terminal_indicator_sequencequalified_non_terminal_indicator_list ::=
“
[
” qualified_non_terminal_indicator_sequence “]
”qualified_non_terminal_indicator ::=
non_terminal_indicator |
object_identifier “
::
” non_terminal_indicator |category_identifier “
::
” non_terminal_indicator |module_identifier “
:
” non_terminal_indicatornon_terminal_indicator_alias ::=
non_terminal_indicator |
non_terminal_indicator “
as
” non_terminal_indicatornon_terminal_indicator “
::
” non_terminal_indicatornon_terminal_indicator_alias_sequence ::=
non_terminal_indicator_alias |
non_terminal_indicator_alias “
,
”non_terminal_indicator_alias_sequence
non_terminal_indicator_alias_list ::=
“
[
” non_terminal_indicator_alias_sequence “]
”operator_sequence ::=
operator specification |
operator specification “
,
”operator_sequence
operator_list ::=
“
[
” operator_sequence “]
”coinductive_predicate_template_term ::=
coinductive_predicate_template |
coinductive_predicate_template_sequence |
coinductive_predicate_template_list
coinductive_predicate_template_sequence ::=
coinductive_predicate_template |
coinductive_predicate_template “
,
”coinductive_predicate_template_sequence
coinductive_predicate_template_list ::=
“
[
” coinductive_predicate_template_sequence “]
”coinductive_predicate_template ::=
atom “
(
” coinductive_mode_terms “)
”coinductive_mode_terms ::=
coinductive_mode_term |
coinductive_mode_terms “
,
” coinductive_mode_termscoinductive_mode_term ::=
“
+
” | “-
”predicate_mode_term ::=
atom “
(
” mode_terms “)
”non_terminal_mode_term ::=
atom “
(
” mode_terms “)
”mode_terms ::=
mode_term |
mode_term “
,
” mode_termsmode_term ::=
“
@
” [ type ] | “+
” [ type ] | “-
” [ 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_proofs ::=
“
zero
” | “zero_or_one
” | “zero_or_more
” | “one
” |“
one_or_more
” | “zero_or_error
” | “one_or_error
” |“
zero_or_one_or_error
” | “error
”meta_predicate_template_term ::=
meta_predicate_template |
meta_predicate_template_sequence |
meta_predicate_template_list
meta_predicate_template_sequence ::=
meta_predicate_template |
meta_predicate_template “
,
” meta_predicate_template_sequencemeta_predicate_template_list ::=
“
[
” meta_predicate_template_sequence “]
”meta_predicate_template ::=
object_identifier “
::
” atom “(
” meta_predicate_specifiers “)
” |category_identifier “
::
” atom “(
” meta_predicate_specifiers “)
” |atom “
(
” meta_predicate_specifiers “)
”meta_predicate_specifiers ::=
meta_predicate_specifier |
meta_predicate_specifier “
,
” meta_predicate_specifiersmeta_predicate_specifier ::=
non-negative integer | “
::
” | “^
” |“
*
”meta_non_terminal_template_term ::=
meta_predicate_template_term
entity_info_list ::=
“
[]
” |“
[
” entity_info_item “is
” nonvar “|
” entity_info_list“
]
”entity_info_item ::=
“
comment
” | “remarks
” |“
author
” | “version
” | “date
” |“
copyright
” | “license
” |“
parameters
” | “parnames
” |“
see_also
” |atom
predicate_info_list ::=
“
[]
” |“
[
” predicate_info_item “is
” nonvar “|
” predicate_info_list “]
”predicate_info_item ::=
“
comment
” | “remarks
” |“
arguments
” | “argnames
” |“
redefinition
” | “allocation
” |“
examples
” | “exceptions
” |atom
object_alias ::=
object_identifier “
as
” object_identifierobject_alias_sequence ::=
object_alias |
object_alias “
,
” object_alias_sequenceobject_alias_list ::=
“
[
” object_alias_sequence “]
”Clauses and goals
clause ::=
object_identifier “
::
” head “:-
” body |module_identifier “
:
” head “:-
” body |head :- body |
fact
goal ::=
message_sending |
super_call |
external_call |
context_switching_call |
callable
message_sending ::=
message_to_object |
message_delegation |
message_to_self
message_to_object ::=
receiver “
::
” messagesmessage_delegation ::=
“
[
” message_to_object “]
”message_to_self ::=
“
::
” messagessuper_call ::=
“
^^
” messagemessages ::=
message |
“
(
” message “,
” messages “)
” |“
(
” message “;
” messages “)
” |“
(
” message “->
” messages “)
”message ::=
callable |
variable
receiver ::=
“
{
” callable “}
” |object_identifier |
variable
external_call ::=
“
{
” callable “}
”context_switching_call ::=
object_identifier “
<<
” goalLambda expressions
lambda_expression ::=
lambda_free_variables “
/
” lambda_parameters “>>
” callable |lambda_free_variables “
/
” callable |lambda_parameters “
>>
” callablelambda_free_variables ::=
“
{
” conjunction of variables “}
” |“
{
” variable “}
” |“
{}
”lambda_parameters ::=
list of terms |
“
[]
”Entity properties
category_property ::=
“
static
” |“
dynamic
” |“
built_in
” |“
file(
” atom “)
” |“
file(
” atom “,
” atom “)
” |“
lines(
” integer “,
” integer “)
” |“
events
” |“
source_data
” |“
public(
” entity_resources_list “)
” |“
protected(
” entity_resources_list “)
” |“
private(
” entity_resources_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 “,
” predicate_call_update_property_list “)
” |“
updates(
” predicate “,
” predicate_call_update_property_list “)
” |“
number_of_clauses(
” integer “)
” |“
number_of_rules(
” integer “)
” |“
number_of_user_clauses(
” integer “)
” |“
number_of_user_rules(
” integer “)
” |“
debugging
”object_property ::=
“
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(
” entity_resources_list “)
” |“
protected(
” entity_resources_list “)
” |“
private(
” entity_resources_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 “,
” predicate_call_update_property_list “)
” |“
updates(
” predicate “,
” predicate_call_update_property_list “)
” |“
number_of_clauses(
” integer “)
” |“
number_of_rules(
” integer “)
” |“
number_of_user_clauses(
” integer “)
”“
number_of_user_rules(
” integer “)
” |“
module
|”“
debugging
”protocol_property ::=
“
static
” |“
dynamic
” |“
built_in
” |“
source_data
” |“
file(
” atom “)
” |“
file(
” atom “,
” atom “)
” |“
lines(
” integer “,
” integer “)
” |“
public(
” entity_resources_list “)
” |“
protected(
” entity_resources_list “)
” |“
private(
” entity_resources_list “)
” |“
declares(
” predicate_indicator “,
” predicate_declaration_property_list “)
” |“
alias(
” predicate_indicator “,
” predicate_alias_property_list “)
” |“
debugging
”predicate_declaration_property_list ::=
“
[
” predicate_declaration_property_sequence “]
”predicate_declaration_property_sequence ::=
predicate_declaration_property |
predicate_declaration_property “
,
”predicate_declaration_property_sequence
predicate_declaration_property ::=
“
static
” | “dynamic
” |“
scope(
” scope “)
” |“
private
” | “protected
” | “public
” |“
coinductive
” |“
multifile
” |“
synchronized
” |“
meta_predicate(
” meta_predicate_template “)
” |“
coinductive(
” coinductive_predicate_template “)
” |“
non_terminal(
” non_terminal_indicator “)
” |“
include(
” atom “)
” |“
line_count(
” integer “)
” |“
mode(
” predicate_mode_term | non_terminal_mode_term “,
” number_of_proofs “)
” |“
info(
” list “)
”predicate_definition_property_list ::=
“
[
” predicate_definition_property_sequence “]
”predicate_definition_property_sequence ::=
predicate_definition_property |
predicate_definition_property “
,
”predicate_definition_property_sequence
predicate_definition_property ::=
“
inline
” | “auxiliary
” |“
non_terminal(
” non_terminal_indicator “)
” |“
include(
” atom “)
” |“
line_count(
” integer “)
” |“
number_of_clauses(
” integer “)
” |“
number_of_rules(
” integer “)
”predicate_alias_property_list ::=
“
[
” predicate_alias_property_sequence “]
”predicate_alias_property_sequence ::=
predicate_alias_property |
predicate_alias_property “
,
” predicate_alias_property_sequencepredicate_alias_property ::=
“
for(
” predicate_indicator “)
” |“
from(
” entity_identifier “)
” |“
non_terminal(
” non_terminal_indicator “)
” |“
include(
” atom “)
” |“
line_count(
” integer “)
”predicate ::=
predicate_indicator |
“
^^
” predicate_indicator |“
::
” predicate_indicator |variable “
::
” predicate_indicator |object_identifier “
::
” predicate_indicator |variable “
:
” predicate_indicator |module_identifier “
:
” predicate_indicatorpredicate_call_update_property_list ::=
“
[
” predicate_call_update_property_sequence “]
”predicate_call_update_property_sequence ::=
predicate_call_update_property |
predicate_call_update_property “
,
”predicate_call_update_property_sequence
predicate_call_update_property ::=
“
caller(
” predicate_indicator “)
” |“
include(
” atom “)
” |“
line_count(
” integer “)
” |“
as(
” predicate_indicator “)
”Predicate properties
predicate_property ::=
“
static
” | “dynamic
” |“
scope(
” scope “)
” |“
private
” | “protected
” | “public
” |“
logtalk
” | “prolog
” | “foreign
” |“
coinductive(
” coinductive_predicate_template “)
” |“
multifile
” |“
synchronized
” |“
built_in
” |“
inline
” |“
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 “)
” |“
number_of_rules(
” integer “)
” |“
declared_in(
” entity_identifier “,
” line_count “)
” |“
defined_in(
” object_identifier | category_identifier “,
” line_count “)
” |“
redefined_from(
” object_identifier | category_identifier “,
” line_count “)
” |“
alias_declared_in(
” entity_identifier “,
” line_count “)
”line_count ::=
integer”
Compiler flags
compiler_flag ::=
flag(flag_value)