The Logtalk grammar is here described using Backus-Naur Form syntax. Non-terminal symbols in italics have the defintion found in the ISO Prolog Standard. Terminal symbols are represented in a fixed width font
and between "".
- entity ::=
- object |
- category |
- protocol
- 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 ::=
- begin_category_directive [category_directives] [clauses] end_category_directive.
- begin_category_directive ::=
- "
:- category(
" category_identifier [ ",
" implements_protocols] ").
"
- end_category_directive ::=
- "
:- end_category.
"
- protocol ::=
- begin_protocol_directive [protocol_directives] end_protocol_directive.
- begin_protocol_directive ::=
- "
:- protocol(
" protocol_identifier [ ",
" extends_protocols] ").
"
- end_protocol_directive ::=
- "
:- end_protocol.
"
- 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 |
- entity_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 |
- entity_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 |
- entity_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 |
- entity_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 |
- entity_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 |
- entity_scope "
::
" object_identifier
- specialized_object_sequence ::=
- specialized_object |
- specialized_object "
,
" specialized_object_sequence
- specialized_object_list ::=
- "
[
" specialized_object_sequence "]
"Entity scope
- entity_scope ::=
- "
public
" |- "
protected
" |- "
private
"
- 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 "]
"
Object directives
- object_directives ::=
- object_directive |
- object_directive object_directives
- object_directive ::=
- "
:- initialization(
" callable ").
" |- "
:- uses(
" object_identifiers ").
" |- "
:- calls(
" protocol_identifiers ").
" |- "
:- dynamic.
" |- "
:- info(
" info_list ").
" |- predicate_directives
Category directives
- category_directives ::=
- category_directive |
- category_directive category_directives
- category_directive ::=
- "
:- initialization(
" callable ").
" |- "
:- uses(
" object_identifiers ").
" |- "
:- calls(
" protocol_identifiers ").
" |- "
:- dynamic.
" |- "
:- info(
" info_list ").
" |- predicate_directives
Protocol directives
- protocol_directives ::=
- protocol_directive |
- protocol_directive protocol_directives
- protocol_directive ::=
- "
:- initialization(
" callable ").
" |- "
:- dynamic.
" |- "
:- info(
" info_list ").
" |- predicate_directives
Predicate directives
- predicate_directives ::=
- predicate_directive |
- predicate_directive predicate_directives
- predicate_directive ::=
- scope_directive |
- mode_directive |
- metapredicate_directive |
- info_directive |
- operator_directive |
- dynamic_directive |
- discontiguous_directive
- scope_directive ::=
- "
:- public(
" predicate_indicator_term ").
" |- "
:- protected(
" predicate_indicator_term ").
" |- "
:- private(
" predicate_indicator_term ").
"
- mode_directive ::=
- "
:- mode(
" predicate_mode_term ",
" number_of_solutions ").
"
- metapredicate_directive ::=
- "
:- metapredicate(
" metapredicate_mode_indicator ").
"
- info_directive ::=
- "
:- info(
" predicate_indicator ",
" info_list ").
"
- 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_mode_term ::=
- atom "
(
" mode_terms ")
"
- mode_terms ::=
- mode_term |
- mode_term "
,
" mode_terms
- mode_term ::=
- "
@
" [type] | "+
" [type] | "-
" [type] | "?
" [type]
- metapredicate_mode_indicator ::=
- atom "
(
" metapredicate_terms ")
"
- metapredicate_terms ::=
- metapredicate_term |
- metapredicate_term "
,
" metapredicate_terms
- metapredicate_term ::=
- "
::
" | "*
"
- 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
"
- info_list ::=
- "
[]
" |- "
[
" info_item "is
" nonvar "|
" info_list "]
"
- info_item ::=
- "
comment
" | "authors
" | "version
" | "date
" | "parnames
" |- "
argnames
" | "definition
" | "redefinition
" | "allocation
" |- atom
- clauses ::=
- clause |
- clause clauses
- goal ::=
- callable |
- message_call |
- external_call |
- built_in_method_call
- 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 "}
"
- built_in_method_call ::=
- "
self(
" variable ")
" |- "
this(
" variable ")
" |- "
sender(
" variable ")
" |- "
parameter(
" integer ",
" variable ")
"
- category_property ::=
- "
static
" |- "
dynamic
" |- "
built_in
"
- object_property ::=
- "
static
" |- "
dynamic
" |- "
built_in
"
- protocol_property ::=
- "
static
" |- "
dynamic
" |- "
built_in
"
- predicate_property ::=
- "
static
" |- "
dynamic
" |- "
private
" |- "
protected
" |- "
public
" |- "
built_in
" |- "
declared_in(
" entity_identifier ")
" |- "
defined_in(
" object_identifier | category_identifier ")
" |- "
metapredicate(
" metapredicate_mode_indicator ")
"
Previous | Next | Table of Contents | Bibliography | Glossary
Last updated on: February 10, 2001