Applied new documentation structure with limited number of books.

Fixed Eiffel syntax wiki page to be processed by the Eiffel wikiparser.


git-svn-id: https://svn.eiffel.com/eiffel-org/trunk@1402 abb3cda0-5349-4a8f-a601-0c33ac3a8c38
This commit is contained in:
jfiat
2015-01-30 10:18:32 +00:00
parent f39fda37e6
commit 4513ee238e
585 changed files with 538 additions and 455 deletions

View File

@@ -1,6 +1,6 @@
[[Property:title|Community]]
[[Property:description|Members of the Eiffel community can contribute to this documentation through this book]]
[[Property:weight|2]]
[[Property:weight|15]]
[[Property:uuid|75c75712-7c3e-2757-51b7-77b404471e2e]]
=You can become a contributor!=

View File

@@ -1,5 +1,5 @@
[[Property:title|Draft]]
[[Property:weight|999]]
[[Property:weight|99]]
[[Property:uuid|c277e707-67a0-14a2-099e-5b861f2480ad]]

View File

@@ -1,7 +1,7 @@
[[Property:title|Guide]]
[[Property:description|Central repository of information about Eiffel and the products and technologies of Eiffel Software]]
[[Property:link_title|Information Guide]]
[[Property:weight|-10]]
[[Property:weight|10]]
[[Property:uuid|68b37685-64e9-f564-9258-29e709a55f44]]
'''Guide to Eiffel Information'''

View File

@@ -1,6 +1,6 @@
[[Property:title|Why Eiffel?]]
[[Property:description|arguments for using Eiffel]]
[[Property:weight|-1]]
[[Property:weight|11]]
[[Property:uuid|df007537-c0dd-2ea6-233b-764ad483eb65]]
This book collects arguments for using Eiffel.

View File

@@ -0,0 +1,5 @@
[[Property:title|Language reference]]
[[Property:link_title|Language]]
[[Property:weight|3]]

View File

@@ -49,7 +49,10 @@ A simple string -- specimen of Simple_string -- is a [[#Strings|String]] consist
{| border="2"
|+ Special Characters and Their Codes
! Character || Code || Mnemonic name
|-
! Character
! Code
! Mnemonic name
|-
| @ || %A || At-sign
|-
@@ -77,7 +80,7 @@ A simple string -- specimen of Simple_string -- is a [[#Strings|String]] consist
|-
| NUL || %U || Null
|-
| <nowiki>|</nowiki> || %V || Vertical bar
| &#124; || %V || Vertical bar
|-
| % || %% || Percent
|-
@@ -113,479 +116,475 @@ Line wrapping parts are used as separators between one [[#Simple strings|Simple_
===Class names ===
Class_name ::= [[#Identfiers|Identifier]] <br/><br/>
<br/>
Class_name ::= [[#Identfiers|Identifier]]
===Class declarations ===
Class_declaration ::= <nowiki>[</nowiki>[[#Notes|Notes]]<nowiki>]</nowiki> <br/>
[[#Class headers|Class_header]] <br/>
<nowiki>[</nowiki>[[#Formal generic parameters|Formal_generics]]<nowiki>]</nowiki> <br/>
<nowiki>[</nowiki>[[#Obsolete marks|Obsolete]]<nowiki>]</nowiki> <br/>
<nowiki>[</nowiki>[[#Inheritance parts|Inheritance]]<nowiki>]</nowiki> <br/>
<nowiki>[</nowiki>[[#Creators parts|Creators]]<nowiki>]</nowiki> <br/>
<nowiki>[</nowiki>[[#Converter clauses|Converters]]<nowiki>]</nowiki> <br/>
<nowiki>[</nowiki>[[#Feature parts|Features]]<nowiki>]</nowiki> <br/>
<nowiki>[</nowiki>[[#Assertions|Invariant]]<nowiki>]</nowiki> <br/>
<nowiki>[</nowiki>[[#Notes|Notes]]<nowiki>]</nowiki> <br/>
<code>end</code><br/>
<br/>
Class_declaration ::= <nowiki>[</nowiki>[[#Notes|Notes]]<nowiki>]</nowiki>
[[#Class headers|Class_header]]
<nowiki>[</nowiki>[[#Formal generic parameters|Formal_generics]]<nowiki>]</nowiki>
<nowiki>[</nowiki>[[#Obsolete marks|Obsolete]]<nowiki>]</nowiki>
<nowiki>[</nowiki>[[#Inheritance parts|Inheritance]]<nowiki>]</nowiki>
<nowiki>[</nowiki>[[#Creators parts|Creators]]<nowiki>]</nowiki>
<nowiki>[</nowiki>[[#Converter clauses|Converters]]<nowiki>]</nowiki>
<nowiki>[</nowiki>[[#Feature parts|Features]]<nowiki>]</nowiki>
<nowiki>[</nowiki>[[#Assertions|Invariant]]<nowiki>]</nowiki>
<nowiki>[</nowiki>[[#Notes|Notes]]<nowiki>]</nowiki>
<code>end</code>
===Notes ===
Notes ::= <code>note</code> Note_list<br/>
Note_list ::= {Note_entry ";" …}* <br/>
Note_entry ::= Note_name Note_values <br/>
Note_name ::= [[#Identifiers|Identifier]] ":" <br/>
Note_values ::= {Note_item ","…}+ <br/>
Note_item ::= [[#Identifiers|Identifier]] | [[#Manifest constants|Manifest_constant]] <br/>
<br/>
Notes ::= <code>note</code> Note_list
Note_list ::= {Note_entry ";" …}*
Note_entry ::= Note_name Note_values
Note_name ::= [[#Identifiers|Identifier]] ":"
Note_values ::= {Note_item ","…}+
Note_item ::= [[#Identifiers|Identifier]] | [[#Manifest constants|Manifest_constant]]
===Class headers ===
Class_header ::= [Header_mark] <code>class</code> [[#Class names|Class_name]] <br/>
Header_mark ::= <code>deferred</code> | <code>expanded</code> | <code>frozen</code> <br/>
<br/>
Class_header ::= <nowiki>[Header_mark]</nowiki> <code>class</code> [[#Class names|Class_name]]
Header_mark ::= <code>deferred</code> | <code>expanded</code> | <code>frozen</code>
===Obsolete marks ===
Obsolete ::= <code>obsolete</code> Message <br/>
Message ::= [[#Manifest strings|Manifest_string]] <br/>
<br/>
Obsolete ::= <code>obsolete</code> Message
Message ::= [[#Manifest strings|Manifest_string]]
===Feature parts ===
Features ::= Feature_clause+ <br/>
Feature_clause ::= <code>feature</code> <nowiki>[</nowiki>[[#Clients|Clients]]<nowiki>]</nowiki> <nowiki>[</nowiki>[[#Feature parts|Header_comment]]<nowiki>]</nowiki> Feature_declaration_list <br/>
Feature_declaration_list ::= {[[#Feature declarations|Feature_declaration]] ";" …}* <br/>
Header_comment ::= [[#Comments|Comment]] <br/>
<br/>
Features ::= Feature_clause+
Feature_clause ::= <code>feature</code> <nowiki>[</nowiki>[[#Clients|Clients]]<nowiki>]</nowiki> <nowiki>[</nowiki>[[#Feature parts|Header_comment]]<nowiki>]</nowiki> Feature_declaration_list
Feature_declaration_list ::= {[[#Feature declarations|Feature_declaration]] ";" …}*
Header_comment ::= [[#Comments|Comment]]
===Feature declarations ===
Feature_declaration ::= [[#New feature lists|New_feature_list]] Declaration_body <br/>
Declaration_body ::= <nowiki>[</nowiki>[[#Formal argument and entity declarations|Formal_arguments]]<nowiki>]</nowiki> [Query_mark] [Feature_value] <br/>
Query_mark ::= Type_mark <nowiki>[</nowiki>[[#Assigner marks|Assigner_mark]]<nowiki>]</nowiki> <br/>
Type_mark ::= ":" [[#Types|Type]] <br/>
Feature_value ::= [Explicit_value] <br/>
<nowiki>[</nowiki>[[#Obsolete parts|Obsolete]]<nowiki>]</nowiki> <br/>
<nowiki>[</nowiki>[[#Feature parts|Header_comment]]<nowiki>]</nowiki> <br/>
<nowiki>[</nowiki>[[#Feature bodies|Attribute_or_routine]]<nowiki>]</nowiki> <br/>
Explicit_value ::= "=" [[#Manifest constants|Manifest_constant]] <br/>
<br/>
<br/>
Feature_declaration ::= [[#New feature lists|New_feature_list]] Declaration_body
Declaration_body ::= <nowiki>[</nowiki>[[#Formal argument and entity declarations|Formal_arguments]]<nowiki>] [Query_mark] [Feature_value] </nowiki>
Query_mark ::= Type_mark <nowiki>[</nowiki>[[#Assigner marks|Assigner_mark]]<nowiki>]</nowiki>
Type_mark ::= ":" [[#Types|Type]]
Feature_value ::= <nowiki>[Explicit_value] </nowiki>
<nowiki>[</nowiki>[[#Obsolete parts|Obsolete]]<nowiki>]</nowiki>
<nowiki>[</nowiki>[[#Feature parts|Header_comment]]<nowiki>]</nowiki>
<nowiki>[</nowiki>[[#Feature bodies|Attribute_or_routine]]<nowiki>]</nowiki>
Explicit_value ::= "=" [[#Manifest constants|Manifest_constant]]
===New feature lists ===
New_feature_list ::= {New_feature "," …}+ <br/>
New_feature ::= [<code>frozen</code>] [[#Feature names|Extended_feature_name]]<br/>
<br/>
<br/>
New_feature_list ::= {New_feature "," …}+
New_feature ::= <nowiki>[</nowiki><code>frozen</code><nowiki>]</nowiki> [[#Feature names|Extended_feature_name]]
===Feature bodies ===
Attribute_or_routine ::= <nowiki>[</nowiki>[[#Assertions|Precondition]]<nowiki>]</nowiki> <br/>
<nowiki>[</nowiki>[[#Local variable declarations|Local_declarations]]<nowiki>]</nowiki> <br/>
Feature_body <br/>
<nowiki>[</nowiki>[[#Assertions|Postcondition]]<nowiki>]</nowiki> <br/>
<nowiki>[</nowiki>[[#Rescue clauses|Rescue]]<nowiki>]</nowiki> <br/>
<code>end</code><br/>
Feature_body ::= [[#Routine bodies|Deferred]] | [[#Routine bodies|Effective_routine]] | [[#Attribute bodies|Attribute]]<br/>
<br/>
<br/>
Attribute_or_routine ::= <nowiki>[</nowiki>[[#Assertions|Precondition]]<nowiki>]</nowiki>
<nowiki>[</nowiki>[[#Local variable declarations|Local_declarations]]<nowiki>]</nowiki>
Feature_body
<nowiki>[</nowiki>[[#Assertions|Postcondition]]<nowiki>]</nowiki>
<nowiki>[</nowiki>[[#Rescue clauses|Rescue]]<nowiki>]</nowiki>
<code>end</code>
Feature_body ::= [[#Routine bodies|Deferred]] | [[#Routine bodies|Effective_routine]] | [[#Attribute bodies|Attribute]]
===Feature names ===
Extended_feature_name ::= Feature_name [Alias] <br/>
Feature_name ::= [[#Identfiers|Identifier]] <br/>
Alias ::= <code>alias</code> '"' Alias_name '"' [<code>convert</code>] <br/>
Alias_name ::= [[#Operators|Operator]] | Bracket <br/>
Bracket ::= "[ ]" <br/>
<br/>
<br/>
Extended_feature_name ::= Feature_name <nowiki>[Alias]</nowiki>
Feature_name ::= [[#Identfiers|Identifier]]
Alias ::= <code>alias</code> '"' Alias_name '"' <nowiki>[</nowiki><code>convert</code><nowiki>]</nowiki>
Alias_name ::= [[#Operators|Operator]] | Bracket
Bracket ::= "<nowiki>[ ]</nowiki>"
===Operators ===
Operator ::= Unary | Binary <br/>
Unary ::= <code>not</code> | "+" | "" | Free_unary <br/>
Binary ::= "+" | "" | "*" | "/" | "//" | "\\" | "^" | ".." | <br/>
"<" | ">" | "<=" | ">=" | <br/>
<code>and</code> | <code>or</code> | <code>xor</code> | <code>and</code> <code>then</code> | <code>or</code> <code>else</code> | <code>implies</code> | <br/>
Free_binary <br/>
Operator ::= Unary | Binary
Unary ::= <code>not</code> | "+" | "" | Free_unary
Binary ::= <nowiki>"+" | "" | "*" | "/" | "//" | "\\" | "^" | ".." | "<" | ">" | "<=" | ">=" |</nowiki> <code>and</code> | <code>or</code> | <code>xor</code> | <code>and</code> <code>then</code> | <code>or</code> <code>else</code> | <code>implies</code> | Free_binary
{{note| Free_unary and Free_binary are free operators that are distinct from (respectively) the ''standard'' unary and binary operators (one- or two-character symbols) explicitly listed in the Unary and Binary productions. See ''Definition: Free operator'' in the standard for more precision.}}
<br/>
<br/>
===Assigner marks ===
Assigner_mark ::= <code>assign</code> [[#Feature names|Feature_name]]<br/>
<br/>
<br/>
Assigner_mark ::= <code>assign</code> [[#Feature names|Feature_name]]
===Inheritance parts ===
Inheritance ::= Inherit_clause+ <br/>
Inherit_clause ::= <code>inherit</code> [Non_conformance] Parent_list <br/>
Non_conformance ::= "{" NONE "}" <br/>
Parent_list ::= {Parent ";" …}+ <br/>
Parent ::= [[#Types|Class_type]] [Feature_adaptation] <br/>
Feature_adaptation ::= <nowiki>[</nowiki>[[#Undefine clauses|Undefine]]<nowiki>]</nowiki> <br/>
<nowiki>[</nowiki>[[#Redefinition|Redefine]]<nowiki>]</nowiki> <br/>
<nowiki>[</nowiki>[[#Rename clauses|Rename]]<nowiki>]</nowiki> <br/>
<nowiki>[</nowiki>[[#Export adaptation|New_exports]]<nowiki>]</nowiki> <br/>
<nowiki>[</nowiki>[[#Select clauses|Select]]<nowiki>]</nowiki> <br/>
<code>end</code> <br/>
<br/>
<br/>
<br/>
Inheritance ::= Inherit_clause+
Inherit_clause ::= <code>inherit</code> <nowiki>[Non_conformance]</nowiki> Parent_list
Non_conformance ::= "{" NONE "}"
Parent_list ::= {Parent ";" …}+
Parent ::= [[#Types|Class_type]] <nowiki>[Feature_adaptation]</nowiki>
Feature_adaptation ::= <nowiki>[</nowiki>[[#Undefine clauses|Undefine]]<nowiki>]</nowiki>
<nowiki>[</nowiki>[[#Redefinition|Redefine]]<nowiki>]</nowiki>
<nowiki>[</nowiki>[[#Rename clauses|Rename]]<nowiki>]</nowiki>
<nowiki>[</nowiki>[[#Export adaptation|New_exports]]<nowiki>]</nowiki>
<nowiki>[</nowiki>[[#Select clauses|Select]]<nowiki>]</nowiki>
<code>end</code>
===Rename clauses ===
Rename ::= <code>rename</code> Rename_list <br/>
Rename_list ::= {Rename_pair "," …}+ <br/>
Rename_pair ::= [[#Feature names|Feature_name]] <code>as</code> [[#Feature names|Extended_feature_name]] <br/>
<br/>
<br/>
Rename ::= <code>rename</code> Rename_list
Rename_list ::= {Rename_pair "," …}+
Rename_pair ::= [[#Feature names|Feature_name]] <code>as</code> [[#Feature names|Extended_feature_name]]
===Clients ===
Clients ::= "{" Class_list "}" <br/>
Class_list ::= {[[#Class names|Class_name]] "," …}+<br/>
<br/>
<br/>
<br/>
Clients ::= "{" Class_list "}"
Class_list ::= {[[#Class names|Class_name]] "," …}+
===Export adaptation ===
New_exports ::= <code>export</code> New_export_list <br/>
New_export_list ::= {New_export_item ";" …}+ <br/>
New_export_item ::= [[#Clients|Clients]] <nowiki>[</nowiki>[[#Feature parts|Header_comment]]<nowiki>]</nowiki> Feature_set <br/>
Feature_set ::= Feature_list | <code>all</code> <br/>
Feature_list ::= {[[#Feature names|Feature_name]] "," …}+<br/>
<br/>
<br/>
<br/>
New_exports ::= <code>export</code> New_export_list
New_export_list ::= {New_export_item ";" …}+
New_export_item ::= [[#Clients|Clients]] <nowiki>[</nowiki>[[#Feature parts|Header_comment]]<nowiki>]</nowiki> Feature_set
Feature_set ::= Feature_list | <code>all</code>
Feature_list ::= {[[#Feature names|Feature_name]] "," …}+
===Formal argument and entity declarations ===
Formal_arguments ::= "(" [[#Formal argument and entity declarations|Entity_declaration_list]] ")" <br/>
Entity_declaration_list ::= {Entity_declaration_group ";" …}+ <br/>
Entity_declaration_group ::= Identifier_list [[#Feature declarations|Type_mark]] <br/>
Identifier_list ::= {[[#Identfiers|Identifier]] "," …}+ <br/>
<br/>
<br/>
Formal_arguments ::= "(" [[#Formal argument and entity declarations|Entity_declaration_list]] ")"
Entity_declaration_list ::= {Entity_declaration_group ";" …}+
Entity_declaration_group ::= Identifier_list [[#Feature declarations|Type_mark]]
Identifier_list ::= {[[#Identfiers|Identifier]] "," …}+
===Routine bodies ===
Deferred ::= <code>deferred</code> <br/>
Effective_routine ::= Internal | [[#External routines|External]] <br/>
Internal ::= Routine_mark [[#Instructions|Compound]] <br/>
Routine_mark ::= <code>do</code> | Once <br/>
Once ::= <code>once</code> [ "("Key_list ")" ] <br/>
Key_list ::= {[[#Manifest strings|Manifest_string]] "," …}+<br/>
<br/>
<br/>
Deferred ::= <code>deferred</code>
Effective_routine ::= Internal | [[#External routines|External]]
Internal ::= Routine_mark [[#Instructions|Compound]]
Routine_mark ::= <code>do</code> | Once
Once ::= <code>once</code> <nowiki>[</nowiki> "("Key_list ")" <nowiki>]</nowiki>
Key_list ::= {[[#Manifest strings|Manifest_string]] "," …}+
===Local variable declarations ===
Local_declarations ::= <code>local</code> <nowiki>[</nowiki>[[#Formal argument and entity declarations|Entity_declaration_list]]<nowiki>]</nowiki><br/>
<br/>
<br/>
Local_declarations ::= <code>local</code> <nowiki>[</nowiki>[[#Formal argument and entity declarations|Entity_declaration_list]]<nowiki>]</nowiki>
===Instructions ===
Compound ::= {Instruction ";" …}* <br/>
Instruction ::= [[#Creation instructions|Creation_instruction]] | [[#Feature calls|Call]] | [[#Assignments|Assignment]] | [[#Assigner calls|Assigner_call]] | [[#Conditionals|Conditional]] | [[#Multi-branch instructions|Multi_branch]] <br/>
| [[#Loops|Loop]] | [[#Debug instructions|Debug]] | [[#Precursor|Precursor]] | [[#Check instructions|Check]] | [[#Rescue clauses|Retry]]<br/>
<br/>
<br/>
Compound ::= {Instruction ";" …}*
Instruction ::= [[#Creation instructions|Creation_instruction]] | [[#Feature calls|Call]] | [[#Assignments|Assignment]] | [[#Assigner calls|Assigner_call]] | [[#Conditionals|Conditional]] | [[#Multi-branch instructions|Multi_branch]]
| [[#Loops|Loop]] | [[#Debug instructions|Debug]] | [[#Precursor|Precursor]] | [[#Check instructions|Check]] | [[#Rescue clauses|Retry]]
===Assertions ===
Precondition ::= <code>require</code> [<code>else</code>] Assertion <br/>
Postcondition ::= <code>ensure</code> [<code>then</code>] Assertion <nowiki>[</nowiki>[[#"Only" postcondition clauses|Only]]<nowiki>]</nowiki> <br/>
Invariant ::= <code>invariant</code> Assertion <br/>
Assertion ::= {Assertion_clause ";" …}* <br/>
Assertion_clause ::= [Tag_mark] Unlabeled_assertion_clause <br/>
Unlabeled_assertion_clause ::= [[#Expressions|Boolean_expression]] | [[#Comments|Comment]] <br/>
Tag_mark ::= Tag ":" <br/>
Tag ::= [[#Identfiers|Identifier]] <br/>
<br/>
<br/>
Precondition ::= <code>require</code> [<code>else</code>] Assertion
Postcondition ::= <code>ensure</code> [<code>then</code>] Assertion <nowiki>[</nowiki>[[#"Only" postcondition clauses|Only]]<nowiki>]</nowiki>
Invariant ::= <code>invariant</code> Assertion
Assertion ::= {Assertion_clause ";" …}*
Assertion_clause ::= [Tag_mark] Unlabeled_assertion_clause
Unlabeled_assertion_clause ::= [[#Expressions|Boolean_expression]] | [[#Comments|Comment]]
Tag_mark ::= Tag ":"
Tag ::= [[#Identfiers|Identifier]]
===“Old” postcondition expressions ===
Old ::= <code>old</code> [[#Expressions|Expression]]<br/>
<br/>
<br/>
Old ::= <code>old</code> [[#Expressions|Expression]]
===“Only” postcondition clauses ===
Only ::= <code>only</code> <nowiki>[</nowiki>[[#Export adaptation|Feature_list]]<nowiki>]</nowiki><br/>
<br/>
<br/>
Only ::= <code>only</code> <nowiki>[</nowiki>[[#Export adaptation|Feature_list]]<nowiki>]</nowiki>
===Check instructions ===
Check ::= <code>check</code> [[#Assertions|Assertion]] <nowiki>[</nowiki>[[#Notes|Notes]]<nowiki>]</nowiki> <code>end</code><br/>
<br/>
<br/>
Check ::= <code>check</code> [[#Assertions|Assertion]] <nowiki>[</nowiki>[[#Notes|Notes]]<nowiki>]</nowiki> <code>end</code>
===Variants ===
Variant ::= <code>variant</code> <nowiki>[</nowiki>[[#Assertions|Tag_mark]]<nowiki>]</nowiki> [[#Expressions|Expression]]<br/>
<br/>
<br/>
Variant ::= <code>variant</code> <nowiki>[</nowiki>[[#Assertions|Tag_mark]]<nowiki>]</nowiki> [[#Expressions|Expression]]
===Precursor ===
Precursor ::= <code>Precursor</code> [Parent_qualification] <nowiki>[</nowiki>[[#Actual arguments|Actuals]]<nowiki>]</nowiki> <br/>
Parent_qualification ::= "{" [[#Class names|Class_name]] "}"<br/>
<br/>
<br/>
Precursor ::= <code>Precursor</code> [Parent_qualification] <nowiki>[</nowiki>[[#Actual arguments|Actuals]]<nowiki>]</nowiki>
Parent_qualification ::= "{" [[#Class names|Class_name]] "}"
===Redefinition ===
Redefine ::= <code>redefine</code> [[#Export adaptation|Feature_list]]<br/>
<br/>
<br/>
Redefine ::= <code>redefine</code> [[#Export adaptation|Feature_list]]
===Undefine clauses ===
Undefine ::= <code>undefine</code> [[#Export adaptation|Feature_list]]<br/>
<br/>
<br/>
Undefine ::= <code>undefine</code> [[#Export adaptation|Feature_list]]
===Types ===
Type ::= Class_or_tuple_type | [[#Formal generic parameters|Formal_generic_name]] | Anchored <br/>
Class_or_tuple_type ::= Class_type | [[#Tuple types|Tuple_type]] <br/>
Class_type ::= [Attachment_mark] [[#Class names|Class_name]] <nowiki>[</nowiki>[[#Actual generic parameters|Actual_generics]]<nowiki>]</nowiki> <br/>
Attachment_mark ::= "?" | "!" <br/>
Anchored ::= [Attachment_mark] <code>like</code> Anchor <br/>
Anchor ::= [[#Feature names|Feature_name]] | <code>Current</code><br/>
<br/>
<br/>
Type ::= Class_or_tuple_type | [[#Formal generic parameters|Formal_generic_name]] | Anchored
Class_or_tuple_type ::= Class_type | [[#Tuple types|Tuple_type]]
Class_type ::= [Attachment_mark] [[#Class names|Class_name]] <nowiki>[</nowiki>[[#Actual generic parameters|Actual_generics]]<nowiki>]</nowiki>
Attachment_mark ::= "?" | "!"
Anchored ::= [Attachment_mark] <code>like</code> Anchor
Anchor ::= [[#Feature names|Feature_name]] | <code>Current</code>
===Actual generic parameters ===
Actual_generics ::= "[" Type_list "]" <br/>
Type_list ::= {[[#Types|Type]] "," …}+<br/>
<br/>
<br/>
Actual_generics ::= <nowiki>"[" Type_list "]"</nowiki>
Type_list ::= {[[#Types|Type]] "," …}+
===Formal generic parameters ===
Formal_generics ::= "[" Formal_generic_list "]" <br/>
Formal_generic_list ::= {Formal_generic ","…}+ <br/>
Formal_generic ::= [<code>frozen</code>] Formal_generic_name <nowiki>[</nowiki>[[#Generic constraints|Constraint]]<nowiki>]</nowiki> <br/>
Formal_generic_name ::= [?] [[#Identfiers|Identifier]]<br/>
<br/>
<br/>
Formal_generics ::= <nowiki>"[" Formal_generic_list "]"</nowiki>
Formal_generic_list ::= {Formal_generic ","…}+
Formal_generic ::= <nowiki>[</nowiki><code>frozen</code><nowiki>]</nowiki> Formal_generic_name <nowiki>[</nowiki>[[#Generic constraints|Constraint]]<nowiki>]</nowiki>
Formal_generic_name ::= <nowiki>[?]</nowiki> [[#Identfiers|Identifier]]
===Generic constraints ===
Constraint ::= ">" Constraining_types [Constraint_creators] <br/>
Constraining_types ::= Single_constraint | Multiple_constraint <br/>
Single_constraint ::= [[#Types|Type]] [Renaming] <br/>
Renaming ::= [[#Rename clauses|Rename]] <code>end</code><br/>
Multiple_constraint ::= "{" Constraint_list "}" <br/>
Constraint_list ::= {Single_constraint "," …}+ <br/>
Constraint_creators ::= <code>create</code> [[#Export adaptation|Feature_list]] <code>end</code><br/>
<br/>
<br/>
Constraint ::= ">" Constraining_types <nowiki>[Constraint_creators]</nowiki>
Constraining_types ::= Single_constraint | Multiple_constraint
Single_constraint ::= [[#Types|Type]] [Renaming]
Renaming ::= [[#Rename clauses|Rename]] <code>end</code>
Multiple_constraint ::= "{" Constraint_list "}"
Constraint_list ::= {Single_constraint "," …}+
Constraint_creators ::= <code>create</code> [[#Export adaptation|Feature_list]] <code>end</code>
===Tuple types ===
Tuple_type ::= <code>TUPLE</code> [Tuple_parameter_list] <br/>
Tuple_parameter_list ::= "[" Tuple_parameters "]"<br/>
Tuple_parameters ::= [[#Actual generic parameters|Type_list]] | [[#Formal argument and entity declarations|Entity_declaration_list]]<br/>
<br/>
<br/>
Tuple_type ::= <code>TUPLE</code> <nowiki>[Tuple_parameter_list]</nowiki>
Tuple_parameter_list ::= <nowiki>"[" Tuple_parameters "]"</nowiki>
Tuple_parameters ::= [[#Actual generic parameters|Type_list]] | [[#Formal argument and entity declarations|Entity_declaration_list]]
===Manifest tuples ===
Manifest_tuple ::= "[" Expression_list "]" <br/>
Expression_list ::= {[[#Expressions|Expression]] "," …}*<br/>
<br/>
<br/>
Manifest_tuple ::= <nowiki>"[" Expression_list "]"</nowiki>
Expression_list ::= {[[#Expressions|Expression]] "," …}*
===Converter clauses ===
Converters ::= <code>convert</code> Converter_list <br/>
Converter_list ::= {Converter ","…}+ <br/>
Converter ::= Conversion_procedure | Conversion_query <br/>
Conversion_procedure ::= [[#Feature names|Feature_name]] "(" "{" [[#Actual generic parameters|Type_list]] "}" ")" <br/>
Conversion_query ::= [[#Feature names|Feature_name]] ":" "{" [[#Actual generic parameters|Type_list]] "}"<br/>
<br/>
<br/>
Converters ::= <code>convert</code> Converter_list
Converter_list ::= {Converter ","…}+
Converter ::= Conversion_procedure | Conversion_query
Conversion_procedure ::= [[#Feature names|Feature_name]] "(" "{" [[#Actual generic parameters|Type_list]] "}" ")"
Conversion_query ::= [[#Feature names|Feature_name]] ":" "{" [[#Actual generic parameters|Type_list]] "}"
===Select clauses ===
Select ::= <code>select</code> [[#Export adaptation|Feature_list]]<br/>
<br/>
<br/>
Select ::= <code>select</code> [[#Export adaptation|Feature_list]]
===Conditionals ===
Conditional ::= <code>if</code> Then_part_list [Else_part] <code>end</code> <br/>
Then_part_list ::= {Then_part <code>elseif</code> …}+ <br/>
Then_part ::= [[#Expressions|Boolean_expression]] <code>then</code> [[#Instructions|Compound]] <br/>
Else_part ::= <code>else</code> [[#Instructions|Compound]]<br/>
<br/>
<br/>
Conditional ::= <code>if</code> Then_part_list <nowiki>[Else_part]</nowiki> <code>end</code>
Then_part_list ::= {Then_part <code>elseif</code> …}+
Then_part ::= [[#Expressions|Boolean_expression]] <code>then</code> [[#Instructions|Compound]]
Else_part ::= <code>else</code> [[#Instructions|Compound]]
===Multi-branch instructions ===
Multi_branch ::= <code>inspect</code> [[#Expressions|Expression]] [When_part_list] [Else_part] <code>end</code> <br/>
When_part_list ::= When_part+ <br/>
When_part ::= <code>when</code> Choices <code>then</code> [[#Instructions|Compound]] <br/>
Choices ::= {Choice "," …}+ <br/>
Choice ::= [[#Constants|Constant]] | [[#Manifest constants|Manifest_type]] | Constant_interval | Type_interval <br/>
Constant_interval ::= [[#Constants|Constant]] ".." [[#Constants|Constant]] <br/>
Type_interval ::= [[#Manifest constants|Manifest_type]] ".." [[#Manifest constants|Manifest_type]]<br/>
<br/>
<br/>
Multi_branch ::= <code>inspect</code> [[#Expressions|Expression]] <nowiki>[When_part_list] [Else_part]</nowiki> <code>end</code>
When_part_list ::= When_part+
When_part ::= <code>when</code> Choices <code>then</code> [[#Instructions|Compound]]
Choices ::= {Choice "," …}+
Choice ::= [[#Constants|Constant]] | [[#Manifest constants|Manifest_type]] | Constant_interval | Type_interval
Constant_interval ::= [[#Constants|Constant]] ".." [[#Constants|Constant]]
Type_interval ::= [[#Manifest constants|Manifest_type]] ".." [[#Manifest constants|Manifest_type]]
===Loops ===
Loop ::= Initialization <br/>
<nowiki>[</nowiki>[[#Assertions|Invariant]]<nowiki>]</nowiki> <br/>
Exit_condition <br/>
Loop_body <br/>
<nowiki>[</nowiki>[[#Variants|Variant]]<nowiki>]</nowiki><br/>
<code>end</code> <br/>
Initialization ::= <code>from</code> [[#Instructions|Compound]] <br/>
Exit_condition ::= <code>until</code> [[#Expressions|Boolean_expression]] <br/>
Loop_body ::= <code>loop</code> [[#Instructions|Compound]]<br/>
<br/>
<br/>
Loop ::= Initialization
<nowiki>[</nowiki>[[#Assertions|Invariant]]<nowiki>]</nowiki>
Exit_condition
Loop_body
<nowiki>[</nowiki>[[#Variants|Variant]]<nowiki>]</nowiki>
<code>end</code>
Initialization ::= <code>from</code> [[#Instructions|Compound]]
Exit_condition ::= <code>until</code> [[#Expressions|Boolean_expression]]
Loop_body ::= <code>loop</code> [[#Instructions|Compound]]
===Debug instructions ===
Debug ::= <code>debug</code> [ "("[[#Routine_bodies|Key_list]] ")" ] [[#Instructions|Compound]] <code>end</code><br/>
<br/>
<br/>
Debug ::= <code>debug</code> <nowiki>[</nowiki> "("[[#Routine_bodies|Key_list]] ")" ] [[#Instructions|Compound]] <code>end</code>
===Attribute bodies ===
Attribute ::= <code>attribute</code> [[#Instructions|Compound]]<br/>
<br/>
<br/>
Attribute ::= <code>attribute</code> [[#Instructions|Compound]]
===Entities and variables ===
Entity ::= Variable | Read_only <br/>
Variable ::= Variable_attribute | Local <br/>
Variable_attribute ::= [[#Feature names|Feature_name]] <br/>
Local ::= [[#Identfiers|Identifier]] | <code>Result</code> <br/>
Read_only ::= Formal | Constant_attribute | <code>Current</code> <br/>
Formal ::= [[#Identfiers|Identifier]] <br/>
Constant_attribute ::= [[#Feature names|Feature_name]]<br/>
<br/>
<br/>
Entity ::= Variable | Read_only
Variable ::= Variable_attribute | Local
Variable_attribute ::= [[#Feature names|Feature_name]]
Local ::= [[#Identfiers|Identifier]] | <code>Result</code>
Read_only ::= Formal | Constant_attribute | <code>Current</code>
Formal ::= [[#Identfiers|Identifier]]
Constant_attribute ::= [[#Feature names|Feature_name]]
===Creators parts ===
Creators ::= Creation_clause+ <br/>
Creation_clause ::= <code>create</code> <nowiki>[</nowiki>[[#Clients|Clients]]<nowiki>]</nowiki> <nowiki>[</nowiki>[[#Feature parts|Header_comment]]<nowiki>]</nowiki> Creation_procedure_list <br/>
Creation_procedure_list ::= {Creation_procedure ","…}+ <br/>
Creation_procedure ::= [[#Feature names|Feature_name]]<br/>
<br/>
<br/>
Creators ::= Creation_clause+
Creation_clause ::= <code>create</code> <nowiki>[</nowiki>[[#Clients|Clients]]<nowiki>]</nowiki> <nowiki>[</nowiki>[[#Feature parts|Header_comment]]<nowiki>]</nowiki> Creation_procedure_list
Creation_procedure_list ::= {Creation_procedure ","…}+
Creation_procedure ::= [[#Feature names|Feature_name]]
===Creation instructions ===
Creation_instruction ::= <code>create</code> [Explicit_creation_type] Creation_call <br/>
Explicit_creation_type ::= "{" [[#Types|Type]] "}" <br/>
Creation_call ::= [[#Entities and variables|Variable]] [Explicit_creation_call] <br/>
Explicit_creation_call ::= "." [[#Feature calls|Unqualified_call]]<br/>
<br/>
<br/>
Creation_instruction ::= <code>create</code> <nowiki>[Explicit_creation_type]</nowiki> Creation_call
Explicit_creation_type ::= "{" [[#Types|Type]] "}"
Creation_call ::= [[#Entities and variables|Variable]] [Explicit_creation_call]
Explicit_creation_call ::= "." [[#Feature calls|Unqualified_call]]
===Creation expressions ===
Creation_expression ::= <code>create</code> [[#Creation instructions|Explicit_creation_type]] <nowiki>[</nowiki>[[#Creation instructions|Explicit_creation_call]]<nowiki>]</nowiki><br/>
<br/>
<br/>
Creation_expression ::= <code>create</code> [[#Creation instructions|Explicit_creation_type]] <nowiki>[</nowiki>[[#Creation instructions|Explicit_creation_call]]<nowiki>]</nowiki>
===Equality expressions ===
Equality ::= [[#Expressions|Expression]] Comparison [[#Expressions|Expression]] <br/>
Comparison ::= "=" | "/=" | "~" | "/~"<br/>
<br/>
<br/>
Equality ::= [[#Expressions|Expression]] Comparison [[#Expressions|Expression]]
Comparison ::= "=" | "/=" | "~" | "/~"
===Assignments ===
Assignment ::= [[#Entities and variables|Variable]] ":=" [[#Expressions|Expression]]<br/>
<br/>
<br/>
Assignment ::= [[#Entities and variables|Variable]] ":=" [[#Expressions|Expression]]
===Assigner calls ===
Assigner_call ::= [[#Expressions|Expression]] ":=" [[#Expressions|Expression]]<br/>
<br/>
<br/>
Assigner_call ::= [[#Expressions|Expression]] ":=" [[#Expressions|Expression]]
===Feature calls ===
Call ::= Object_call | Non_object_call <br/>
Object_call ::= [Target "."] Unqualified_call <br/>
Unqualified_call ::= [[#Feature names|Feature_name]] <nowiki>[</nowiki>[[#Actual arguments|Actuals]]<nowiki>]</nowiki> <br/>
Target ::= [[#Entities and variables|Local]] | [[#Entities and variables|Read_only]] | Call | Parenthesized_target <br/>
Parenthesized_target ::= "( |" [[#Expressions|Expression]] "| )" <br/>
Non_object_call ::= "{" [[#Types|Type]] "}" "." Unqualified_call<br/>
<br/>
<br/>
Call ::= Object_call | Non_object_call
Object_call ::= <nowiki>[Target "."] Unqualified_call </nowiki>
Unqualified_call ::= [[#Feature names|Feature_name]] <nowiki>[</nowiki>[[#Actual arguments|Actuals]]<nowiki>]</nowiki>
Target ::= [[#Entities and variables|Local]] | [[#Entities and variables|Read_only]] | Call | Parenthesized_target
Parenthesized_target ::= "( |" [[#Expressions|Expression]] "| )"
Non_object_call ::= "{" [[#Types|Type]] "}" "." Unqualified_call
===Actual arguments ===
Actuals ::= "(" Actual_list ")" <br/>
Actual_list ::= {[[#Expressions|Expression]] "," …}+<br/>
<br/>
<br/>
Actuals ::= "(" Actual_list ")"
Actual_list ::= {[[#Expressions|Expression]] "," …}+
===Object test ===
Object_test ::= "{" [[#Identfiers|Identifier]] ":" [[#Types|Type]] "}" [[#Expressions|Expression]]<br/>
<br/>
<br/>
Object_test ::= "{" [[#Identfiers|Identifier]] ":" [[#Types|Type]] "}" [[#Expressions|Expression]]
===Rescue clauses ===
Rescue ::= <code>rescue</code> [[#Instructions|Compound]] <br/>
Retry ::= <code>retry</code><br/>
<br/>
<br/>
Rescue ::= <code>rescue</code> [[#Instructions|Compound]]
Retry ::= <code>retry</code>
===Agents ===
Agent ::= Call_agent | Inline_agent <br/>
Call_agent ::= <code>agent</code> [[#Call agent bodies|Call_agent_body]] <br/>
Inline_agent ::= <code>agent</code> <nowiki>[</nowiki>[[#Formal argument and entity declarations|Formal_arguments]]<nowiki>]</nowiki> <nowiki>[</nowiki>[[#Feature declarations|Type_mark]]<nowiki>]</nowiki> <nowiki>[</nowiki>[[#Feature bodies|Attribute_or_routine]]<nowiki>]</nowiki> <nowiki>[</nowiki>[[#Call agent bodies|Agent_actuals]]<nowiki>]</nowiki><br/>
<br/>
<br/>
Agent ::= Call_agent | Inline_agent
Call_agent ::= <code>agent</code> [[#Call agent bodies|Call_agent_body]]
Inline_agent ::= <code>agent</code> <nowiki>[</nowiki>[[#Formal argument and entity declarations|Formal_arguments]]<nowiki>]</nowiki> <nowiki>[</nowiki>[[#Feature declarations|Type_mark]]<nowiki>]</nowiki> <nowiki>[</nowiki>[[#Feature bodies|Attribute_or_routine]]<nowiki>]</nowiki> <nowiki>[</nowiki>[[#Call agent bodies|Agent_actuals]]<nowiki>]</nowiki>
===Call agent bodies ===
Call_agent_body ::= Agent_qualified | Agent_unqualified <br/>
Agent_qualified ::= Agent_target ". " Agent_unqualified <br/>
Agent_unqualified ::= [[#Feature names|Feature_name]] [Agent_actuals] <br/>
Agent_target ::= Entity | Parenthesized | [[#Manifest constants|Manifest_type]] <br/>
Agent_actuals ::= "(" Agent_actual_list ")" <br/>
Agent_actual_list ::= {Agent_actual "," …}+ <br/>
Agent_actual ::= [[#Expressions|Expression]] | Placeholder <br/>
Placeholder ::= <nowiki>[</nowiki>[[#Manifest constants|Manifest_type]]<nowiki>]</nowiki> "?"<br/>
<br/>
<br/>
Call_agent_body ::= Agent_qualified | Agent_unqualified
Agent_qualified ::= Agent_target ". " Agent_unqualified
Agent_unqualified ::= [[#Feature names|Feature_name]] [Agent_actuals]
Agent_target ::= Entity | Parenthesized | [[#Manifest constants|Manifest_type]]
Agent_actuals ::= "(" Agent_actual_list ")"
Agent_actual_list ::= {Agent_actual "," …}+
Agent_actual ::= [[#Expressions|Expression]] | Placeholder
Placeholder ::= <nowiki>[</nowiki>[[#Manifest constants|Manifest_type]]<nowiki>]</nowiki> "?"
===Expressions ===
Expression ::= Basic_expression | Special_expression <br/>
Basic_expression ::= [[#Entities and variables|Read_only]] | [[#Entities and variables|Local]] | [[#Feature calls|Call]] | [[#Precursor|Precursor]] | [[#Equality expressions|Equality]] | Parenthesized | [[#"Old" postcondition expressions|Old]] | <br/>
[[#Operator expressions|Operator_expression]] | [[#Bracket expressions|Bracket_expression]] | [[#Creation expression|Creation_expression]] <br/>
Special_expression ::= [[#Manifest constants|Manifest_constant]] | [[#Manifest tuples|Manifest_tuple]] | [[#Agents|Agent]] | [[#Object test|Object_test]] | Once_string | <br/>
Address <br/>
Parenthesized ::= "(" Expression ")" <br/>
Address ::= "$" [[#Entities and variables|Variable]] <br/>
Once_string ::= <code>once</code> [[#Manifest strings|Manifest_string]] <br/>
Boolean_expression ::= Basic_expression | [[#Manifest constants|Boolean_constant]] | [[#Object test|Object_test]]<br/>
<br/>
<br/>
Expression ::= Basic_expression | Special_expression
Basic_expression ::= [[#Entities and variables|Read_only]] | [[#Entities and variables|Local]] | [[#Feature calls|Call]] | [[#Precursor|Precursor]] | [[#Equality expressions|Equality]] | Parenthesized | [[#"Old" postcondition expressions|Old]] |
[[#Operator expressions|Operator_expression]] | [[#Bracket expressions|Bracket_expression]] | [[#Creation expression|Creation_expression]]
Special_expression ::= [[#Manifest constants|Manifest_constant]] | [[#Manifest tuples|Manifest_tuple]] | [[#Agents|Agent]] | [[#Object test|Object_test]] | Once_string |
Address
Parenthesized ::= "(" Expression ")"
Address ::= "$" [[#Entities and variables|Variable]]
Once_string ::= <code>once</code> [[#Manifest strings|Manifest_string]]
Boolean_expression ::= Basic_expression | [[#Manifest constants|Boolean_constant]] | [[#Object test|Object_test]]
===Operator expressions ===
Operator_expression ::= Unary_expression | Binary_expression <br/>
Unary_expression ::= Unary Expression <br/>
Binary_expression ::= [[#Expressions|Expression]] [[#Operators|Binary]] [[#Expressions|Expression]]<br/>
<br/>
<br/>
Operator_expression ::= Unary_expression | Binary_expression
Unary_expression ::= Unary Expression
Binary_expression ::= [[#Expressions|Expression]] [[#Operators|Binary]] [[#Expressions|Expression]]
===Bracket expressions ===
Bracket_expression ::= Bracket_target "[" [[#Actual arguments|Actuals]] "]" <br/>
Bracket_target ::= [[#Feature calls|Target]] | [[#Expressions|Once_string]] | [[#Manifest constants|Manifest_constant]] | [[#Manifest tuples|Manifest_tuple]]<br/>
<br/>
<br/>
Bracket_expression ::= Bracket_target "[" [[#Actual arguments|Actuals]] "]"
Bracket_target ::= [[#Feature calls|Target]] | [[#Expressions|Once_string]] | [[#Manifest constants|Manifest_constant]] | [[#Manifest tuples|Manifest_tuple]]
===Constants ===
Constant ::= [[#Manifest constants|Manifest_constant]] | Constant_attribute <br/>
Constant_attribute ::= [[#Feature names|Feature_name]]<br/>
<br/>
<br/>
Constant ::= [[#Manifest constants|Manifest_constant]] | Constant_attribute
Constant_attribute ::= [[#Feature names|Feature_name]]
===Manifest constants ===
Manifest_constant ::= [Manifest_type] Manifest_value <br/>
Manifest_type ::= "{" [[#Types|Type]] "}"<br/>
Manifest_value ::= Boolean_constant | <br/>
Character_constant | <br/>
Integer_constant | <br/>
Real_constant | <br/>
[[#Manifest strings|Manifest_string]] | <br/>
Manifest_type <br/>
Sign ::= "+" | "" <br/>
Integer_constant ::= [Sign] [[#Integers|Integer]] <br/>
Character_constant ::= " ' " [[#Characters|Character]] " ' " <br/>
Boolean_constant ::= <code>True</code> | <code>False</code> <br/>
Real_constant ::= [Sign] [[#Reals|Real]]<br/>
<br/>
<br/>
Manifest_constant ::= [Manifest_type] Manifest_value
Manifest_type ::= "{" [[#Types|Type]] "}"
Manifest_value ::= Boolean_constant |
Character_constant |
Integer_constant |
Real_constant |
[[#Manifest strings|Manifest_string]] |
Manifest_type
Sign ::= "+" | ""
Integer_constant ::= <nowiki>[Sign]</nowiki> [[#Integers|Integer]]
Character_constant ::= " ' " [[#Characters|Character]] " ' "
Boolean_constant ::= <code>True</code> | <code>False</code>
Real_constant ::= <nowiki>[Sign]</nowiki> [[#Reals|Real]]
===Manifest strings ===
Manifest_string ::= Basic_manifest_string | Verbatim_string <br/>
Basic_manifest_string ::= ' " ' String_content ' " ' <br/>
String_content ::= {[[#Simple strings|Simple_string]] [[#Line wrapping parts|Line_wrapping_part]] …}+<br/>
Verbatim_string ::= Verbatim_string_opener Line_sequence Verbatim_string_closer <br/>
Verbatim_string_opener ::= ' " ' <nowiki>[</nowiki>[[#Simple strings|Simple_string]]<nowiki>]</nowiki> Open_bracket <br/>
Verbatim_string_closer ::= Close_bracket <nowiki>[</nowiki>[[#Simple strings|Simple_string]]<nowiki>]</nowiki> ' " ' <br/>
Open_bracket ::= "[" | "{" <br/>
Close_bracket ::= "]" | "}"Verbatim_string ::= Verbatim_string_opener Line_sequence Verbatim_string_closer <br/>
Verbatim_string_opener ::= ' " ' <nowiki>[</nowiki>[[#Simple strings|Simple_string]]<nowiki>]</nowiki> Open_bracket <br/>
Verbatim_string_closer ::= Close_bracket <nowiki>[</nowiki>[[#Simple strings|Simple_string]]<nowiki>]</nowiki> ' " ' <br/>
Open_bracket ::= "[" | "{" <br/>
Close_bracket ::= "]" | "}" <br/>
<br/>
<br/>
Manifest_string ::= Basic_manifest_string | Verbatim_string
Basic_manifest_string ::= ' " ' String_content ' " '
String_content ::= {[[#Simple strings|Simple_string]] [[#Line wrapping parts|Line_wrapping_part]] …}+
Verbatim_string ::= Verbatim_string_opener Line_sequence Verbatim_string_closer
Verbatim_string_opener ::= ' " ' <nowiki>[</nowiki>[[#Simple strings|Simple_string]]<nowiki>]</nowiki> Open_bracket
Verbatim_string_closer ::= Close_bracket <nowiki>[</nowiki>[[#Simple strings|Simple_string]]<nowiki>]</nowiki> ' " '
Open_bracket ::= <nowiki>"[" | "{"</nowiki>
Close_bracket ::= "]" | "}"Verbatim_string ::= Verbatim_string_opener Line_sequence Verbatim_string_closer
Verbatim_string_opener ::= ' " ' <nowiki>[</nowiki>[[#Simple strings|Simple_string]]<nowiki>]</nowiki> Open_bracket
Verbatim_string_closer ::= Close_bracket <nowiki>[</nowiki>[[#Simple strings|Simple_string]]<nowiki>]</nowiki> ' " '
Open_bracket ::= <nowiki>"[" | "{" </nowiki>
Close_bracket ::= <nowiki>"]" | "}" </nowiki>
===External routines ===
External ::= <code>external</code> External_language [External_name] <br/>
External_language ::= Unregistered_language | [[#Registered languages|Registered_language]] <br/>
Unregistered_language ::= [[#Manifest strings|Manifest_string]] <br/>
External_name ::= <code>alias</code> [[#Manifest strings|Manifest_string]]<br/>
External ::= <code>external</code> External_language <nowiki>[External_name]</nowiki>
External_language ::= Unregistered_language | [[#Registered languages|Registered_language]]
Unregistered_language ::= [[#Manifest strings|Manifest_string]]
External_name ::= <code>alias</code> [[#Manifest strings|Manifest_string]]
{{note|If the `inline' keyword is used in the Registered_language part, then External_name part is the inline code on the specified language.}}
<br/>
<br/>
===Registered languages ===
Registered_language ::= [[#C externals|C_external]] | [[#C++ externals|C++_external]] | [[#DLL externals|DLL_external]]<br/>
<br/>
<br/>
Registered_language ::= [[#C externals|C_external]] | [[#C++ externals|C++_external]] | [[#DLL externals|DLL_external]]
===External signatures ===
External_signature ::= <code>signature</code> [External_argument_types] [: External_type] <br/>
External_argument_types ::= "(" External_type_list ")" <br/>
External_type_list ::= {External_type "," …}* <br/>
External_type ::= [[#Simple strings|Simple_string]]<br/>
<br/>
<br/>
External_signature ::= <code>signature</code> <nowiki>[External_argument_types] [: External_type]</nowiki>
External_argument_types ::= "(" External_type_list ")"
External_type_list ::= {External_type "," …}*
External_type ::= [[#Simple strings|Simple_string]]
===External file use ===
External_file_use ::= <code>use</code> External_file_list <br/>
External_file_list ::= {External_file "," …}+ <br/>
External_file ::= External_user_file | External_system_file <br/>
External_user_file ::= ' " ' [[#Simple strings|Simple_string]] ' " ' <br/>
External_system_file ::= "<"[[#Simple strings|Simple_string]] ">"<br/>
<br/>
<br/>
External_file_use ::= <code>use</code> External_file_list
External_file_list ::= {External_file "," <nowiki>… }+ </nowiki>
External_file ::= External_user_file | External_system_file
External_user_file ::= ' " ' [[#Simple strings|Simple_string]] ' " '
External_system_file ::= <nowiki>"<"</nowiki> [[#Simple strings|Simple_string]] <nowiki>">"</nowiki>
===C externals ===
C_external ::= ' " ' <code>C</code> [<code>inline</code>] [ [[#External signatures |External_signature]] ] [ [[#External file use |External_file_use]] ] ' " '<br/>
<br/>
<br/>
C_external ::= ' " ' <code>C</code> <nowiki>[</nowiki><code>inline</code>] <nowiki>[</nowiki> [[#External signatures |External_signature]] <nowiki>] [</nowiki> [[#External file use |External_file_use]] <nowiki>] ' " '</nowiki>
===C++ externals ===
C++_external ::= ' " ' <code>C++</code> <code>inline</code> [ [[#External signatures |External_signature]] ] [ [[#External file use |External_file_use]] ] ' " '<br/>
<br/>
<br/>
C++_external ::= ' " ' <code>C++</code> <code>inline</code> <nowiki>[</nowiki> [[#External signatures |External_signature]] <nowiki>] [</nowiki> [[#External file use |External_file_use]] <nowiki>] ' " '</nowiki>
===DLL externals ===
DLL_external ::= ' " ' <code>dll</code> [<code>windows</code>] DLL_identifier [DLL_index] [ [[#External signatures |External_signature]] ]
[ [[#External file use |External_file_use]] ] ' " ' <br/>
DLL_identifier ::= [[#Simple strings|Simple_string]] <br/>
DLL_index ::= [[#Integers|Integer]]<br/>
<br/>
<br/>
DLL_external ::= ' " ' <code>dll</code> <nowiki>[</nowiki><code>windows</code><nowiki>] DLL_identifier [DLL_index] [[</nowiki> [[#External signatures |External_signature]] <nowiki>] [</nowiki> [[#External file use |External_file_use]] <nowiki>] ' " ' </nowiki>
DLL_identifier ::= [[#Simple strings|Simple_string]]
DLL_index ::= [[#Integers|Integer]]
===Comments ===
Comment ::= " " {[[#Simple strings|Simple_string]] Comment_break …}* <br/>
Comment_break ::= New_line [Blanks_or_tabs] " "<br/>
<br/>
Comment ::= " " <nowiki>{</nowiki>[[#Simple strings|Simple_string]] Comment_break …}*
Comment_break ::= New_line <nowiki>[Blanks_or_tabs] " "</nowiki>
===Integers ===
Integer ::= [Integer_base] Digit_sequence <br/>
Integer_base ::= "0" Integer_base_letter <br/>
Integer_base_letter ::= "b" | "c" | "x" | "B" | "C" | "X" <br/>
Digit_sequence ::= Digit+ <br/>
Digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | <br/>
"a" | "b" | "c" | "d" | "e" | "f" | <br/>
"A" | "B" | "C" | "D" | "E" | "F" | "_"<br/>
<br/>
Integer ::= <nowiki>[Integer_base]</nowiki> Digit_sequence
Integer_base ::= "0" Integer_base_letter
Integer_base_letter ::= "b" | "c" | "x" | "B" | "C" | "X"
Digit_sequence ::= Digit+
Digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" |
"a" | "b" | "c" | "d" | "e" | "f" |
"A" | "B" | "C" | "D" | "E" | "F" | "_"

View File

@@ -1,5 +1,5 @@
[[Property:title|Void-safe programming in Eiffel]]
[[Property:weight|3]]
[[Property:weight|10]]
[[Property:uuid|a03568e8-eb79-70d7-04a3-6fd3ed7ac2b3]]
=About void-safe software development using Eiffel=

View File

@@ -0,0 +1,80 @@
[[Property:title|Common myths and misconceptions about Eiffel]]
[[Property:link_title|]]
[[Property:weight|2]]
[[Property:uuid|056c0ab0-8e44-571f-f126-0b1850980754]]
Often, when we speak about Eiffel to prospective users, we hear them repeat misinformation about the method, the language, or the tools. Most of the time, the stories are familiar to us … and untrue. Here are a few of the myths that we hear most often, as recounted and debunked by the series entitled [http://eiffel.com/developers/presentations/ "Where Eiffel Fits"].
==Eiffel is an "academic" language only: ''Whoa, wrong! Twice!''==
Recently, I was offered the opportunity to speak to a local technology group about Eiffel for Microsoft .Net. The leader of this group is part of a small commercially-oriented software development company. Concerning Eiffel, he said, “All I know about Eiffel is that its an academic language.”
We hear that one a lot … and its wrong … in two unrelated ways.
First, as you should know by now, Eiffel is a framework for software development. It has a full-lifecycle development method. The Eiffel method is supported by a notation we call the Eiffel programming language. The notation just happens to be designed such that when it contains sufficient detail, it can be compiled into a running software system. Additionally, the method and language are supported by a set of tools including an interactive development and compiler. So to refer to Eiffel only as a "language" is to do injustice to the complete framework of which the language is only one part.
Secondly, Im not sure what “academic language” means exactly, but if it means only used in an academic setting, or not fit for practical work, then this could not be farther from the truth. It is true that Bertrand Meyer who developed the original Eiffel concepts has academic background and is well-respected in the academic community. Its also true that many of those Eiffel ideas evolved from work that was done by other academic computer scientists and mathematicians. And its true that many colleges and universities use Eiffel to teach the best practices of software development.
But Eiffel is also used successfully in many commercial and government endeavors. If you have any doubts, pay a visit to [https://www.eiffel.com/company/customers/testimonials/ eiffel.com] and check out the success stories and customers testimonials.
==Eiffel is not for doing "real" work: ''That's a joke, right?''==
Occasionally weve heard people say that Eiffel is only suitable for building “toy” systems.
This is similar to the "academic language" argument and is just as false.
In actuality, we see Eiffel being used often in situations in which other technologies fail. If anything it is the other commonly used technologies that tend to break down under stress.
We see Eiffel being used instead of other technologies for systems in which scalability and reliability are essential.
One of our customers is an organization that has developed a payroll system using Eiffel that every week pays over two hundred thousand employees in twenty thousand different institutions … the people in this organization would assure you that Eiffel is indeed industrial grade.
==Not many people are using Eiffel: ''You wouldn't want to share an elevator with them all!''==
The answer to this one depends a bit upon your frame of reference. Some time ago Microsoft estimated that there were twenty million Visual Basic programmers world wide.
If this is true, then relatively speaking, we have to admit that Eiffels market share ''is'' considerably smaller than that of Visual Basic.
Despite that, its not correct to say that not many people use Eiffel. Eiffel licenses world wide number in the tens of thousands. If you use Eiffel, you are not alone. These license-holders have formed a lasting worldwide quorum. Many world-class organizations are committed now, and will continue to be committed to the Eiffel framework. There is support through your maintenance contract with Eiffel Software. Help and information are available online in the form of the [https://www.eiffel.com/company/customers/ Eiffel Software users list] and websites like [http://community.eiffel.com/room/ EiffelRoom].
Eiffel Software's dual licensing model gives developers the opportunity to learn Eiffel without a great initial financial commitment.
So, dont worry about it, plenty of people use Eiffel … and those numbers are increasing constantly.
==If we use Eiffel, we may not be able to find qualified programmers: ''Gimme a break.''==
Through the years some potential Eiffel users have expressed to us a concern that if they embrace Eiffel, that they may not be able to find a sufficient number of qualified developers.
This is of course incorrect.
First, almost all Eiffel people were proficient in some other technology before they became Eiffel people. It turns out that this really works to your advantage. You see, Eiffel people want to stay Eiffel people. So an Eiffel programmer on the job market will be searching for an Eiffel position first, and would probably rather have a root canal than to go back to working in his or her previous technology.
Additionally, it is important also to understand that Eiffel developers are easy to create. Because Eiffel is simple, clean, and elegant, it doesnt take long to get people going with it. I teach a five-day course that contains fifteen programming exercises. Each time Ive taught the course, almost every student has finished every exercise. Students leave with a good foundation for how to begin saving time and money for their organization by constructing quality software with Eiffel. These people can be fluent in Eiffel in as little as a couple of months. This can be contrasted with the other extreme ... a well-known Microsoft Windows expert told me a couple of years ago that he estimates it to take 5 to 7 years to become truly fluent in C++/COM programming on Windows. Programmers who are proficient in other technologies often experience Eiffel as a breath of fresh air.
==Eiffel might not be around in five/eight/ten (choose one) years: ''Better recalibrate your crystal ball, Nostradamus!''==
I think the first time I heard this one, it was about 1989.
And of course, Ive heard it many times in the years since.
And of course, its not true.
Eiffel is more complete and functionally superior in most ways to every other commercially viable software development technology … and there are enough people around who recognize this (that quorum of users I mentioned earlier) to ensure that Eiffel will be around for a long time to come.
Its possible that twenty-five years from now, there will be a significantly better software engineering idea … but certainly there hasnt been anything thats come close since Eiffels original design in 1985. In most areas, other technologies are playing “catch-up” to Eiffel.
Besides, Eiffel constantly implements refinements and new capabilities with minimal impact on existing software. [[Void-safe programming in Eiffel|Void-safe programming]] is an excellent example of this.
You can get a feel for this issue by watching [http://channel9.msdn.com/posts/Charles/Emmanuel-Stapf-Eiffel-and-Contract-Oriented-Programming/ this video on Microsoft Developers Network Channel9]. Here you'll see Emmanuel Stapf, an engineer at Eiffel Software, speak with Mads Torgersen, one of Microsoft's C# language designers. You'll hear how Eiffel stays fresh and continues to set a technological standard worthy of the aspirations of other technologies.
So, dont worry about it. Eiffel will be here.

View File

@@ -1,4 +1,4 @@
[[Property:title|Eiffel: The Two-Minute Fact Sheet]]
[[Property:title|Two-Minute fact sheet]]
[[Property:weight|0]]
[[Property:uuid|f672bfb8-ddea-beb1-eaa6-e374a6a6bc92]]
If you are both curious about Eiffel and in a hurry, take a couple of minutes to read these facts about Eiffel. If anything here seems too good to be true, please suspend your disbelief. Press on to the more detailed documentation for the rationale, and our success stories for the evidence behind these facts.

View File

@@ -0,0 +1,4 @@
[[Property:title|Overview]]
[[Property:link_title|Overview]]
[[Property:weight|1]]

View File

@@ -1,4 +1,4 @@
[[Property:title|Why your next project should use Eiffel]]
[[Property:title|Your next project in Eiffel]]
[[Property:weight|1]]
[[Property:uuid|b0ff2508-8cd7-2e13-bf6b-b4a7a8235875]]
(After an article in the special Eiffel issue of the ''Journal of Object-Oriented Programming'', May 1996. ) <br/>

View File

@@ -0,0 +1,9 @@
[[Property:title|Technical papers]]
[[Property:description|Background, foundation, or supplemental information about uncovered topics]]
[[Property:link_title|Papers]]
[[Property:weight|4]]
[[Property:uuid|d2b880d6-d1dc-9811-32b8-ed718ad4d4be]]
Occasionally papers are produced providing background, foundation, or supplemental information about the topics covered by the Eiffel documentation. Although the material in these papers might be of interest to many Eiffel users, they might not be suitable in their current form for inclusion in the mainstream documentation books.
You will find a collection of these papers in this book.

View File

@@ -0,0 +1,4 @@
[[Property:title|Tutorials]]
[[Property:link_title|Tutorials]]
[[Property:weight|2]]

View File

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 52 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View File

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 70 KiB

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

Some files were not shown because too many files have changed in this diff Show More