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