From 66904d8d06a231d2c820b4f50d25c770a3ed001d Mon Sep 17 00:00:00 2001 From: halw Date: Sun, 27 Sep 2009 22:07:15 +0000 Subject: [PATCH] Author:halw Date:2009-09-27T22:07:15.000000Z git-svn-id: https://svn.eiffel.com/eiffel-org/trunk@308 abb3cda0-5349-4a8f-a601-0c33ac3a8c38 --- ...l-programming-language-reserved-words.wiki | 209 ++++++++ .../eiffel-programming-language-syntax.wiki | 464 +++++++++--------- 2 files changed, 441 insertions(+), 232 deletions(-) create mode 100644 documentation/current/method/quick-reference-eiffel-programming-language/eiffel-programming-language-reserved-words.wiki diff --git a/documentation/current/method/quick-reference-eiffel-programming-language/eiffel-programming-language-reserved-words.wiki b/documentation/current/method/quick-reference-eiffel-programming-language/eiffel-programming-language-reserved-words.wiki new file mode 100644 index 00000000..c12e9fad --- /dev/null +++ b/documentation/current/method/quick-reference-eiffel-programming-language/eiffel-programming-language-reserved-words.wiki @@ -0,0 +1,209 @@ +[[Property:title|Eiffel language reserved words]] +[[Property:link_title|Eiffel programming language reserved words]] +[[Property:weight|1]] +[[Property:uuid|047ce062-45de-f25c-f356-ee8ec0fc2d1d]] +In the Eiffel language, there are certain words that are considered "reserved". These words have specific meanings recognized by the compiler. As such, it is invalid to attempt to use a reserved word as an ordinary language identifier. + +The reserved words listed in the ISO/ECMA standard are show below with a brief explanation of their meanings. + +==Reserved words== + + +===agent=== + +Used to specify an [[ET: Agents|agent]]. + +:[[Eiffel language syntax#Agents|Syntax.]] + + +===alias=== + +Used to identify an alternative or alias feature name. + +:[[Eiffel language syntax#Feature names|Syntax.]] + +[[ET: The Dynamic Structure: Execution Model#Infix and prefix notations|Usage for infix/prefix notations.]] + +[[ET: The Static Picture: System Organization#External software|Usage in interfaces to external software.]] + +:[[Eiffel language syntax#External routines|Syntax.]] + + +===all=== + +Used in [[ET: Inheritance#Changing the export status|export adaptation]] to indicate that a chosen export status applies to all features inherited from a given parent. + +:[[Eiffel language syntax#Export adaptation|Syntax.]] + + +===and=== + +The logical conjunction [[Eiffel language syntax#Operators|operator]]. Strict when used alone, nonstrict when used with [[#then|then]]. + + +===as=== + + +===assign=== + + +===attribute=== + + +===check=== + + +===class=== + + +===convert=== + + +===create=== + + +===Current=== + + +===debug=== + + +===deferred=== + + +===do=== + + +===else=== + + +===elseif=== + + +===end=== + + +===ensure=== + + +===expanded=== + + +===export=== + + +===external=== + + +===False=== + + +===feature=== + + +===from=== + + +===frozen=== + + +===if=== + + +===implies=== + + +===inherit=== + + +===inspect=== + + +===invariant=== + + +===like=== + + +===local=== + + +===loop=== + + +===not=== + + +===note=== + + +===obsolete=== + + +===old=== + + +===once=== + + +===only=== + + +===or=== + + +===Precursor=== + + +===redefine=== + + +===rename=== + + +===require=== + + +===rescue=== + + +===Result=== + + +===retry=== + + +===select=== + + +===separate=== + + +===then=== + + +===True=== + + +===TUPLE=== + + +===undefine=== + + +===until=== + + +===variant=== + + +===Void=== + + +===when=== + + +===xor=== + + + diff --git a/documentation/current/method/quick-reference-eiffel-programming-language/eiffel-programming-language-syntax.wiki b/documentation/current/method/quick-reference-eiffel-programming-language/eiffel-programming-language-syntax.wiki index 3e587296..6c6dc0d2 100644 --- a/documentation/current/method/quick-reference-eiffel-programming-language/eiffel-programming-language-syntax.wiki +++ b/documentation/current/method/quick-reference-eiffel-programming-language/eiffel-programming-language-syntax.wiki @@ -1,4 +1,4 @@ -[[Property:title|Eiffel syntax specification]] +[[Property:title|Eiffel language syntax]] [[Property:link_title|Eiffel programming language syntax]] [[Property:weight|0]] [[Property:uuid|d0f94270-f1e0-5545-2b1a-8cde3a6c73ab]] @@ -7,7 +7,7 @@ -The syntax specification is shown here as it is in the standard document. The format is BNF-E (Backus-Naur Form - Extended) which is also explained in the Language Specification section of the standard document. +The syntax specification is shown here as it is in the standard document. The format is BNF-E. The Language Specification section of the standard document includes an overview of BNF-E. ==Eiffel Syntax== @@ -18,16 +18,16 @@ Probably the most important to developers is the definition of an ''identifier'' ===Identifiers=== -An '''Identifier''' is a sequence of one or more alpha_numeric characters of which the first is a letter. +An '''identifier''' is a sequence of one or more alpha_numeric characters of which the first is a letter. The definition is augmented by the rule that Identifiers are not valid if they are the same as one of the language's reserved words. ===Class names === -Class_name =Δ [[#Identfiers|Identifier]]

+Class_name ::= [[#Identfiers|Identifier]]


===Class declarations === -Class_declaration =Δ [[[#Notes|Notes]]]
+Class_declaration ::= [[[#Notes|Notes]]]
[[#Class headers|Class_header]]
[[[#Formal generic parameters|Formal_generics]]]
[[[#Obsolete marks|Obsolete]]]
@@ -40,82 +40,82 @@ Class_declaration =Δ [[[#Notes|Notes]]]
end

===Notes === -Notes =Δ note 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]]
+Notes ::= note 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] class [[#Class names|Class_name]]
-Header_mark =Δ deferred | expanded | frozen
+Class_header ::= [Header_mark] class [[#Class names|Class_name]]
+Header_mark ::= deferred | expanded | frozen

===Obsolete marks === -Obsolete =Δ obsolete Message
-Message =Δ [[#Manifest strings|Manifest_string]]
+Obsolete ::= obsolete Message
+Message ::= [[#Manifest strings|Manifest_string]]

===Feature parts === -Features =Δ Feature_clause+
-Feature_clause =Δ feature [[[#Clients|Clients]]] [Header_comment] Feature_declaration_list
-Feature_declaration_list =Δ {[[#Feature declarations|Feature_declaration]] ";" …}*
-Header_comment =Δ Comment
+Features ::= Feature_clause+
+Feature_clause ::= feature [[[#Clients|Clients]]] [Header_comment] Feature_declaration_list
+Feature_declaration_list ::= {[[#Feature declarations|Feature_declaration]] ";" …}*
+Header_comment ::= [[#Comments|Comment]]

===Feature declarations === -Feature_declaration =Δ New_feature_list Declaration_body
-Declaration_body =Δ [Formal_arguments] [Query_mark] [Feature_value]
-Query_mark =Δ Type_mark [Assigner_mark]
-Type_mark =Δ ":" Type
-Feature_value =Δ [Explicit_value]
+Feature_declaration ::= [[#New feature lists|New_feature_list]] Declaration_body
+Declaration_body ::= [Formal_arguments] [Query_mark] [Feature_value]
+Query_mark ::= Type_mark [Assigner_mark]
+Type_mark ::= ":" Type
+Feature_value ::= [Explicit_value]
[Obsolete]
[Header_comment]
[Attribute_or_routine]
-Explicit_value =Δ "=" Manifest_constant
+Explicit_value ::= "=" Manifest_constant


===New feature lists === -New_feature_list =Δ {New_feature "," …}+
-New_feature =Δ [frozen] Extended_feature_name
+New_feature_list ::= {New_feature "," …}+
+New_feature ::= [frozen] Extended_feature_name


===Feature bodies === -Attribute_or_routine =Δ [Precondition]
+Attribute_or_routine ::= [Precondition]
[Local_declarations]
Feature_body
[Postcondition]
[Rescue]
end
-Feature_body =Δ Deferred | Effective_routine | Attribute
+Feature_body ::= Deferred | Effective_routine | Attribute


===Feature names === -Extended_feature_name =Δ Feature_name [Alias]
-Feature_name =Δ Identifier
-Alias =Δ alias '"' Alias_name '"' [convert]
-Alias_name =Δ Operator | Bracket
-Bracket =Δ "[ ]"
+Extended_feature_name ::= Feature_name [Alias]
+Feature_name ::= Identifier
+Alias ::= alias '"' Alias_name '"' [convert]
+Alias_name ::= Operator | Bracket
+Bracket ::= "[ ]"


===Operators === -Operator =Δ Unary | Binary
-Unary =Δ not | "+" | "–" | Free_unary
-Binary =Δ "+" | "–" | "*" | "/" | "//" | "\\" | "^" | ".." |
+Operator ::= Unary | Binary
+Unary ::= not | "+" | "–" | Free_unary
+Binary ::= "+" | "–" | "*" | "/" | "//" | "\\" | "^" | ".." |
"<" | ">" | "<=" | ">=" |
and | or | xor | and then | or else | implies |
Free_binary


===Assigner marks === -Assigner_mark =Δ assign Feature_name
+Assigner_mark ::= assign Feature_name


===Inheritance parts === -Inheritance =Δ Inherit_clause+
-Inherit_clause =Δ inherit [Non_conformance] Parent_list
-Non_conformance =Δ "{" NONE "}"
-Parent_list =Δ {Parent ";" …}+
-Parent =Δ Class_type [Feature_adaptation]
-Feature_adaptation =Δ [Undefine]
+Inheritance ::= Inherit_clause+
+Inherit_clause ::= inherit [Non_conformance] Parent_list
+Non_conformance ::= "{" NONE "}"
+Parent_list ::= {Parent ";" …}+
+Parent ::= Class_type [Feature_adaptation]
+Feature_adaptation ::= [Undefine]
[Redefine]
[Rename]
[New_exports]
@@ -125,358 +125,358 @@ Feature_adaptation =Δ [Undefine]


===Rename clauses === -Rename =Δ rename Rename_list
-Rename_list =Δ {Rename_pair "," …}+
-Rename_pair =Δ Feature_name as Extended_feature_name
+Rename ::= rename Rename_list
+Rename_list ::= {Rename_pair "," …}+
+Rename_pair ::= Feature_name as Extended_feature_name


===Clients === -Clients =Δ "{" Class_list "}"
-Class_list =Δ {Class_name "," …}+
+Clients ::= "{" Class_list "}"
+Class_list ::= {Class_name "," …}+



===Export adaptation === -New_exports =Δ export New_export_list
-New_export_list =Δ {New_export_item ";" …}+
-New_export_item =Δ Clients [Header_comment] Feature_set
-Feature_set =Δ Feature_list | all
-Feature_list =Δ {Feature_name "," …}+
+New_exports ::= export New_export_list
+New_export_list ::= {New_export_item ";" …}+
+New_export_item ::= Clients [Header_comment] Feature_set
+Feature_set ::= Feature_list | all
+Feature_list ::= {Feature_name "," …}+



===Formal argument and entity declarations === -Formal_arguments =Δ "(" Entity_declaration_list ")"
-Entity_declaration_list =Δ {Entity_declaration_group ";" …}+
-Entity_declaration_group =Δ Identifier_list Type_mark
-Identifier_list =Δ {Identifier "," …}+
+Formal_arguments ::= "(" Entity_declaration_list ")"
+Entity_declaration_list ::= {Entity_declaration_group ";" …}+
+Entity_declaration_group ::= Identifier_list Type_mark
+Identifier_list ::= {Identifier "," …}+


===Routine bodies === -Deferred =Δ deferred
-Effective_routine =Δ Internal | External
-Internal =Δ Routine_mark Compound
-Routine_mark =Δ do | Once
-Once =Δ once [ "("Key_list ")" ]
-Key_list =Δ {Manifest_string "," …}+
+Deferred ::= deferred
+Effective_routine ::= Internal | External
+Internal ::= Routine_mark Compound
+Routine_mark ::= do | Once
+Once ::= once [ "("Key_list ")" ]
+Key_list ::= {Manifest_string "," …}+


===Local variable declarations === -Local_declarations =Δ local [Entity_declaration_list]
+Local_declarations ::= local [Entity_declaration_list]


===Instructions === -Compound =Δ {Instruction ";" …}*
-Instruction =Δ Creation_instruction | Call | Assignment | Assigner_call | Conditional | Multi_branch
+Compound ::= {Instruction ";" …}*
+Instruction ::= Creation_instruction | Call | Assignment | Assigner_call | Conditional | Multi_branch
| Loop | Debug | Precursor | Check | Retry


===Assertions === -Precondition =Δ require [else] Assertion
-Postcondition =Δ ensure [then] Assertion [Only]
-Invariant =Δ invariant Assertion
-Assertion =Δ {Assertion_clause ";" …}*
-Assertion_clause =Δ [Tag_mark] Unlabeled_assertion_clause
-Unlabeled_assertion_clause =Δ Boolean_expression | Comment
-Tag_mark =Δ Tag ":"
-Tag =Δ Identifier
+Precondition ::= require [else] Assertion
+Postcondition ::= ensure [then] Assertion [Only]
+Invariant ::= invariant Assertion
+Assertion ::= {Assertion_clause ";" …}*
+Assertion_clause ::= [Tag_mark] Unlabeled_assertion_clause
+Unlabeled_assertion_clause ::= Boolean_expression | Comment
+Tag_mark ::= Tag ":"
+Tag ::= Identifier


===“Old” postcondition expressions === -Old =Δ old Expression
+Old ::= old Expression


===“Only” postcondition clauses === -Only =Δ only [Feature_list]
+Only ::= only [Feature_list]


===Check instructions === -Check =Δ check Assertion [Notes] end
+Check ::= check Assertion [Notes] end


===Variants === -Variant =Δ variant [Tag_mark] Expression
+Variant ::= variant [Tag_mark] Expression


===Precursor === -Precursor =Δ Precursor [Parent_qualification] [Actuals]
-Parent_qualification =Δ "{" Class_name "}"
+Precursor ::= Precursor [Parent_qualification] [Actuals]
+Parent_qualification ::= "{" Class_name "}"


===Redefinition === -Redefine =Δ redefine Feature_list
+Redefine ::= redefine Feature_list


===Undefine clauses === -Undefine =Δ undefine Feature_list
+Undefine ::= undefine Feature_list


===Types === -Type =Δ Class_or_tuple_type | Formal_generic_name | Anchored
-Class_or_tuple_type =Δ Class_type | Tuple_type
-Class_type =Δ [Attachment_mark] Class_name [Actual_generics]
-Attachment_mark =Δ "?" | "!"
-Anchored =Δ [Attachment_mark] like Anchor
-Anchor =Δ Feature_name | Current
+Type ::= Class_or_tuple_type | Formal_generic_name | Anchored
+Class_or_tuple_type ::= Class_type | Tuple_type
+Class_type ::= [Attachment_mark] Class_name [Actual_generics]
+Attachment_mark ::= "?" | "!"
+Anchored ::= [Attachment_mark] like Anchor
+Anchor ::= Feature_name | Current


===Actual generic parameters === -Actual_generics =Δ "[" Type_list "]"
-Type_list =Δ {Type "," …}+
+Actual_generics ::= "[" Type_list "]"
+Type_list ::= {Type "," …}+


===Formal generic parameters === -Formal_generics =Δ "[" Formal_generic_list "]"
-Formal_generic_list =Δ {Formal_generic ","…}+
-Formal_generic =Δ [frozen] Formal_generic_name [Constraint]
-Formal_generic_name =Δ [?] Identifier
+Formal_generics ::= "[" Formal_generic_list "]"
+Formal_generic_list ::= {Formal_generic ","…}+
+Formal_generic ::= [frozen] Formal_generic_name [Constraint]
+Formal_generic_name ::= [?] Identifier


===Generic constraints === -Constraint =Δ "–>" Constraining_types [Constraint_creators]
-Constraining_types =Δ Single_constraint | Multiple_constraint
-Single_constraint =Δ Type [Renaming]
-Renaming =Δ Rename end
-Multiple_constraint =Δ "{" Constraint_list "}"
-Constraint_list =Δ {Single_constraint "," …}+
-Constraint_creators =Δ create Feature_list end
+Constraint ::= "–>" Constraining_types [Constraint_creators]
+Constraining_types ::= Single_constraint | Multiple_constraint
+Single_constraint ::= Type [Renaming]
+Renaming ::= Rename end
+Multiple_constraint ::= "{" Constraint_list "}"
+Constraint_list ::= {Single_constraint "," …}+
+Constraint_creators ::= create Feature_list end


===Tuple types === -Tuple_type =Δ TUPLE [Tuple_parameter_list]
-Tuple_parameter_list =Δ "[" Tuple_parameters "]"
-Tuple_parameters =Δ Type_list | Entity_declaration_list
+Tuple_type ::= TUPLE [Tuple_parameter_list]
+Tuple_parameter_list ::= "[" Tuple_parameters "]"
+Tuple_parameters ::= Type_list | Entity_declaration_list


===Manifest tuples === -Manifest_tuple =Δ "[" Expression_list "]"
-Expression_list =Δ {Expression "," …}*
+Manifest_tuple ::= "[" Expression_list "]"
+Expression_list ::= {Expression "," …}*


===Converter clauses === -Converters =Δ convert Converter_list
-Converter_list =Δ {Converter ","…}+
-Converter =Δ Conversion_procedure | Conversion_query
-Conversion_procedure =Δ Feature_name "(" "{" Type_list "}" ")"
-Conversion_query =Δ Feature_name ":" "{" Type_list "}"
+Converters ::= convert Converter_list
+Converter_list ::= {Converter ","…}+
+Converter ::= Conversion_procedure | Conversion_query
+Conversion_procedure ::= Feature_name "(" "{" Type_list "}" ")"
+Conversion_query ::= Feature_name ":" "{" Type_list "}"


===Select clauses === -Select =Δ select Feature_list
+Select ::= select Feature_list


===Conditionals === -Conditional =Δ if Then_part_list [Else_part] end
-Then_part_list =Δ {Then_part elseif …}+
-Then_part =Δ Boolean_expression then Compound
-Else_part =Δ else Compound
+Conditional ::= if Then_part_list [Else_part] end
+Then_part_list ::= {Then_part elseif …}+
+Then_part ::= Boolean_expression then Compound
+Else_part ::= else Compound


===Multi-branch instructions === -Multi_branch =Δ inspect Expression [When_part_list] [Else_part] end
-When_part_list =Δ When_part+
-When_part =Δ when Choices then Compound
-Choices =Δ {Choice "," …}+
-Choice =Δ Constant | Manifest_type | Constant_interval | Type_interval
-Constant_interval =Δ Constant ".." Constant
-Type_interval =Δ Manifest_type ".." Manifest_type
+Multi_branch ::= inspect Expression [When_part_list] [Else_part] end
+When_part_list ::= When_part+
+When_part ::= when Choices then Compound
+Choices ::= {Choice "," …}+
+Choice ::= Constant | Manifest_type | Constant_interval | Type_interval
+Constant_interval ::= Constant ".." Constant
+Type_interval ::= Manifest_type ".." Manifest_type


===Loops === -Loop =Δ Initialization
+Loop ::= Initialization
[Invariant]
Exit_condition
Loop_body
[Variant]
end
-Initialization =Δ from Compound
-Exit_condition =Δ until Boolean_expression
-Loop_body =Δ loop Compound
+Initialization ::= from Compound
+Exit_condition ::= until Boolean_expression
+Loop_body ::= loop Compound


===Debug instructions === -Debug =Δ debug [ "("Key_list ")" ] Compound end
+Debug ::= debug [ "("Key_list ")" ] Compound end


===Attribute bodies === -Attribute =Δ attribute Compound
+Attribute ::= attribute Compound


===Entities and variables === -Entity =Δ Variable | Read_only
-Variable =Δ Variable_attribute | Local
-Variable_attribute =Δ Feature_name
-Local =Δ Identifier | Result
-Read_only =Δ Formal | Constant_attribute | Current
-Formal =Δ Identifier
-Constant_attribute =Δ Feature_name
+Entity ::= Variable | Read_only
+Variable ::= Variable_attribute | Local
+Variable_attribute ::= Feature_name
+Local ::= Identifier | Result
+Read_only ::= Formal | Constant_attribute | Current
+Formal ::= Identifier
+Constant_attribute ::= Feature_name


===Creators parts === -Creators =Δ Creation_clause+
-Creation_clause =Δ create [Clients] [Header_comment] Creation_procedure_list
-Creation_procedure_list =Δ {Creation_procedure ","…}+
-Creation_procedure =Δ Feature_name
+Creators ::= Creation_clause+
+Creation_clause ::= create [Clients] [Header_comment] Creation_procedure_list
+Creation_procedure_list ::= {Creation_procedure ","…}+
+Creation_procedure ::= Feature_name


===Creation instructions === -Creation_instruction =Δ create [Explicit_creation_type] Creation_call
-Explicit_creation_type =Δ "{" Type "}"
-Creation_call =Δ Variable [Explicit_creation_call]
-Explicit_creation_call =Δ "." Unqualified_call
+Creation_instruction ::= create [Explicit_creation_type] Creation_call
+Explicit_creation_type ::= "{" Type "}"
+Creation_call ::= Variable [Explicit_creation_call]
+Explicit_creation_call ::= "." Unqualified_call


===Creation expressions === -Creation_expression =Δ create Explicit_creation_type [Explicit_creation_call]
+Creation_expression ::= create Explicit_creation_type [Explicit_creation_call]


===Equality expressions === -Equality =Δ Expression Comparison Expression
-Comparison =Δ "=" | "/=" | "~" | "/~"
+Equality ::= Expression Comparison Expression
+Comparison ::= "=" | "/=" | "~" | "/~"


===Assignments === -Assignment =Δ Variable ":=" Expression
+Assignment ::= Variable ":=" Expression


===Assigner calls === -Assigner_call =Δ Expression ":=" Expression
+Assigner_call ::= Expression ":=" Expression


===Feature calls === -Call =Δ Object_call | Non_object_call
-Object_call =Δ [Target "."] Unqualified_call
-Unqualified_call =Δ Feature_name [Actuals]
-Target =Δ Local | Read_only | Call | Parenthesized_target
-Parenthesized_target =Δ "( |" Expression "| )"
-Non_object_call =Δ "{" Type "}" "." Unqualified_call
+Call ::= Object_call | Non_object_call
+Object_call ::= [Target "."] Unqualified_call
+Unqualified_call ::= Feature_name [Actuals]
+Target ::= Local | Read_only | Call | Parenthesized_target
+Parenthesized_target ::= "( |" Expression "| )"
+Non_object_call ::= "{" Type "}" "." Unqualified_call


===Actual arguments === -Actuals =Δ "(" Actual_list ")"
-Actual_list =Δ {Expression "," …}+
+Actuals ::= "(" Actual_list ")"
+Actual_list ::= {Expression "," …}+


===Object test === -Object_test =Δ "{" Identifier ":" Type "}" Expression
+Object_test ::= "{" Identifier ":" Type "}" Expression


===Rescue clauses === -Rescue =Δ rescue Compound
-Retry =Δ retry
+Rescue ::= rescue Compound
+Retry ::= retry


===Agents === -Agent =Δ Call_agent | Inline_agent
-Call_agent =Δ agent Call_agent_body
-Inline_agent =Δ agent [Formal_arguments] [Type_mark] [Attribute_or_routine] [Agent_actuals]
+Agent ::= Call_agent | Inline_agent
+Call_agent ::= agent Call_agent_body
+Inline_agent ::= agent [Formal_arguments] [Type_mark] [Attribute_or_routine] [Agent_actuals]


===Call agent bodies === -Call_agent_body =Δ Agent_qualified | Agent_unqualified
-Agent_qualified =Δ Agent_target ". " Agent_unqualified
-Agent_unqualified =Δ Feature_name [Agent_actuals]
-Agent_target =Δ Entity | Parenthesized | Manifest_type
-Agent_actuals =Δ "(" Agent_actual_list ")"
-Agent_actual_list =Δ {Agent_actual "," …}+
-Agent_actual =Δ Expression | Placeholder
-Placeholder =Δ [Manifest_type] "?"
+Call_agent_body ::= Agent_qualified | Agent_unqualified
+Agent_qualified ::= Agent_target ". " Agent_unqualified
+Agent_unqualified ::= Feature_name [Agent_actuals]
+Agent_target ::= Entity | Parenthesized | Manifest_type
+Agent_actuals ::= "(" Agent_actual_list ")"
+Agent_actual_list ::= {Agent_actual "," …}+
+Agent_actual ::= Expression | Placeholder
+Placeholder ::= [Manifest_type] "?"


===Expressions === -Expression =Δ Basic_expression | Special_expression
-Basic_expression =Δ Read_only | Local | Call | Precursor | Equality | Parenthesized | Old |
+Expression ::= Basic_expression | Special_expression
+Basic_expression ::= Read_only | Local | Call | Precursor | Equality | Parenthesized | Old |
Operator_expression | Bracket_expression | Creation_expression
-Special_expression =Δ Manifest_constant | Manifest_tuple | Agent | Object_test | Once_string |
+Special_expression ::= Manifest_constant | Manifest_tuple | Agent | Object_test | Once_string |
Address
-Parenthesized =Δ "(" Expression ")"
-Address =Δ "$" Variable
-Once_string =Δ once Manifest_string
-Boolean_expression =Δ Basic_expression | Boolean_constant | Object_test
+Parenthesized ::= "(" Expression ")"
+Address ::= "$" Variable
+Once_string ::= once Manifest_string
+Boolean_expression ::= Basic_expression | Boolean_constant | Object_test


===Operator expressions === -Operator_expression =Δ Unary_expression | Binary_expression
-Unary_expression =Δ Unary Expression
-Binary_expression =Δ Expression Binary Expression
+Operator_expression ::= Unary_expression | Binary_expression
+Unary_expression ::= Unary Expression
+Binary_expression ::= Expression Binary Expression


===Bracket expressions === -Bracket_expression =Δ Bracket_target "[" Actuals "]"
-Bracket_target =Δ Target | Once_string | Manifest_constant | Manifest_tuple
+Bracket_expression ::= Bracket_target "[" Actuals "]"
+Bracket_target ::= Target | Once_string | Manifest_constant | Manifest_tuple


===Constants === -Constant =Δ Manifest_constant | Constant_attribute
-Constant_attribute =Δ Feature_name
+Constant ::= Manifest_constant | Constant_attribute
+Constant_attribute ::= Feature_name


===Manifest constants === -Manifest_constant =Δ [Manifest_type] Manifest_value
-Manifest_type =Δ "{" Type "}"
-Manifest_value =Δ Boolean_constant |
+Manifest_constant ::= [Manifest_type] Manifest_value
+Manifest_type ::= "{" Type "}"
+Manifest_value ::= Boolean_constant |
Character_constant |
Integer_constant |
Real_constant |
Manifest_string |
Manifest_type
-Sign =Δ "+" | "–"
-Integer_constant =Δ [Sign] Integer
-Character_constant =Δ " ' " Character " ' "
-Boolean_constant =Δ True | False
-Real_constant =Δ [Sign] Real
+Sign ::= "+" | "–"
+Integer_constant ::= [Sign] Integer
+Character_constant ::= " ' " Character " ' "
+Boolean_constant ::= True | False
+Real_constant ::= [Sign] Real


===Manifest strings === -Manifest_string =Δ Basic_manifest_string | Verbatim_string
-Basic_manifest_string =Δ ' " ' String_content ' " '
-String_content =Δ {Simple_string Line_wrapping_part …}+
-Verbatim_string =Δ Verbatim_string_opener Line_sequence Verbatim_string_closer
-Verbatim_string_opener =Δ ' " ' [Simple_string] Open_bracket
-Verbatim_string_closer =Δ Close_bracket [Simple_string] ' " '
-Open_bracket =Δ "[" | "{"
-Close_bracket =Δ "]" | "}"Verbatim_string =Δ Verbatim_string_opener Line_sequence Verbatim_string_closer
-Verbatim_string_opener =Δ ' " ' [Simple_string] Open_bracket
-Verbatim_string_closer =Δ Close_bracket [Simple_string] ' " '
-Open_bracket =Δ "[" | "{"
-Close_bracket =Δ "]" | "}"
+Manifest_string ::= Basic_manifest_string | Verbatim_string
+Basic_manifest_string ::= ' " ' String_content ' " '
+String_content ::= {Simple_string Line_wrapping_part …}+
+Verbatim_string ::= Verbatim_string_opener Line_sequence Verbatim_string_closer
+Verbatim_string_opener ::= ' " ' [Simple_string] Open_bracket
+Verbatim_string_closer ::= Close_bracket [Simple_string] ' " '
+Open_bracket ::= "[" | "{"
+Close_bracket ::= "]" | "}"Verbatim_string ::= Verbatim_string_opener Line_sequence Verbatim_string_closer
+Verbatim_string_opener ::= ' " ' [Simple_string] Open_bracket
+Verbatim_string_closer ::= Close_bracket [Simple_string] ' " '
+Open_bracket ::= "[" | "{"
+Close_bracket ::= "]" | "}"


===External routines === -External =Δ external External_language [External_name]
-External_language =Δ Unregistered_language | Registered_language
-Unregistered_language =Δ Manifest_string
-External_name =Δ alias Manifest_string
+External ::= external External_language [External_name]
+External_language ::= Unregistered_language | Registered_language
+Unregistered_language ::= Manifest_string
+External_name ::= alias Manifest_string


===Registered languages === -Registered_language =Δ C_external | C++_external | DLL_external
+Registered_language ::= C_external | C++_external | DLL_external


===External signatures === -External_signature =Δ signature [External_argument_types] [: External_type]
-External_argument_types =Δ "(" External_type_list ")"
-External_type_list =Δ {External_type "," …}*
-External_type =Δ Simple_string
+External_signature ::= signature [External_argument_types] [: External_type]
+External_argument_types ::= "(" External_type_list ")"
+External_type_list ::= {External_type "," …}*
+External_type ::= Simple_string


===External file use === -External_file_use =Δ use External_file_list
-External_file_list =Δ {External_file "," …}+
-External_file =Δ External_user_file | External_system_file
-External_user_file =Δ ' " ' Simple_string ' " '
-External_system_file =Δ "<"Simple_string ">"
+External_file_use ::= use External_file_list
+External_file_list ::= {External_file "," …}+
+External_file ::= External_user_file | External_system_file
+External_user_file ::= ' " ' Simple_string ' " '
+External_system_file ::= "<"Simple_string ">"


===C externals === -C_external =Δ ’' " ' C
+C_external ::= ’' " ' C
’[inline]
[External_signature] [External_file_use]
' " '


===C++ externals === -C++_external =Δ ' " ' C++
+C++_external ::= ' " ' C++
inline
[External_signature]
[External_file_use]
@@ -484,27 +484,27 @@ inline


===DLL externals === -DLL_external =Δ ' " ' dll
+DLL_external ::= ' " ' dll
[windows]
DLL_identifier
[DLL_index]
[External_signature]
[External_file_use]
' " '
-DLL_identifier =Δ Simple_string
-DLL_index =Δ Integer
+DLL_identifier ::= Simple_string
+DLL_index ::= Integer


===Comments === -Comment =Δ "– –" {Simple_string Comment_break …}*
-Comment_break =Δ New_line [Blanks_or_tabs] "– –"
+Comment ::= "– –" {Simple_string Comment_break …}*
+Comment_break ::= New_line [Blanks_or_tabs] "– –"

===Integers === -Integer =Δ [Integer_base] 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" |
+Integer ::= [Integer_base] 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" | "_"