
Grammar extracted by Vadim Zaytsev, see the Grammar Zoo entry for details: eiffel/iso-25436-2006/extracted
Source used for this grammar: ISO/IEC 25436:2006(E), Information technology — Eiffel: Analysis, Design and Programming Language, 2006, Syntax sections collected from pages 30–158
Class_name, Class_declaration, Notes, Note_list, Note_entry, Note_name, Note_values, Note_item, Class_header, Header_mark, Obsolete, Message, Features, Feature_clause, Feature_declaration_list, Header_comment, Feature_declaration, Declaration_body, Query_mark, Type_mark, Feature_value, Explicit_value, New_feature_list, New_feature, Attribute_or_routine, Feature_body, Extended_feature_name, Feature_name, Alias, Alias_name, Bracket, Operator, Unary, Binary, Assigner_mark, Inheritance, Inherit_clause, Non_conformance, Parent_list, Parent, Feature_adaptation, Rename, Rename_list, Rename_pair, Clients, Class_list, New_exports, New_export_list, New_export_item, Feature_set, Feature_list, Formal_arguments, Entity_declaration_list, Entity_declaration_group, Identifier_list, Deferred, Effective_routine, Internal, Routine_mark, Once, Key_list, Local_declarations, Compound, Instruction, Precondition, Postcondition, Invariant, Assertion, Assertion_clause, Unlabeled_assertion_clause, Tag_mark, Tag, Old, Only, Check, Variant, Precursor, Parent_qualification, Redefine, Undefine, Type, Class_or_tuple_type, Class_type, Attachment_mark, Anchored, Anchor, Actual_generics, Type_list, Formal_generics, Formal_generic_list, Formal_generic, Formal_generic_name, Constraint, Constraining_types, Single_constraint, Renaming, Multiple_constraint, Constraint_list, Constraint_creators, Tuple_type, Tuple_parameter_list, Tuple_parameters, Manifest_tuple, Expression_list, Converters, Converter_list, Converter, Conversion_procedure, Conversion_query, Select, Conditional, Then_part_list, Then_part, Else_part, Multi_branch, When_part_list, When_part, Choices, Choice, Constant_interval, Type_interval, Loop, Initialization, Exit_condition, Loop_body, Debug, Attribute, Entity, Variable, Variable_attribute, Local, Read_only, Formal, Constant_attribute, Creators, Creation_clause, Creation_procedure_list, Creation_procedure, Creation_instruction, Explicit_creation_type, Creation_call, Explicit_creation_call, Creation_expression, Equality, Comparison, Assignment, Assigner_call, Call, Object_call, Unqualified_call, Target, Parenthesized_target, Non_object_call, Actuals, Actual_list, Object_test, Rescue, Retry, Agent, Call_agent, Inline_agent, Call_agent_body, Agent_qualified, Agent_unqualified, Agent_target, Agent_actuals, Agent_actual_list, Agent_actual, Placeholder, Expression, Basic_expression, Special_expression, Parenthesized, Address, Once_string, Boolean_expression, Operator_expression, Unary_expression, Binary_expression, Bracket_expression, Bracket_target, Constant, Manifest_constant, Manifest_type, Manifest_value, Sign, Integer_constant, Character_constant, Boolean_constant, Real_constant, Manifest_string, Basic_manifest_string, String_content, Verbatim_string, Verbatim_string_opener, Verbatim_string_closer, Open_bracket, Close_bracket, External, External_language, Unregistered_language, External_name, Registered_language, External_signature, External_argument_types, External_type_list, External_type, External_file_use, External_file_list, External_file, External_user_file, External_system_file, C_external, CPP_external, DLL_external, DLL_identifier, DLL_index, Comment, Comment_break, Integer, Integer_base, Integer_base_letter, Digit_sequence, Digit), 0 root (—), 1 top (Class_declaration), 10 bottom (Simple_string 8, Real, Free_unary, Blanks_or_tabs, Free_binary, New_line, Line_sequence, Line_wrapping_part, Character, Identifier 10).Class_name ::= Identifier
Class_declaration ::= Notes Class_header Formal_generics Obsolete Inheritance Creators Converters Features Invariant Notes "end"
Notes ::=
"note" Note_listNote_list ::= Note_entry ";"
Note_entry ::= Note_name Note_values
Note_name ::=
Identifier ":"Note_values ::= Note_item ","
Note_item ::= Identifier Manifest_constant
Class_header ::= Header_mark "class" Class_name
Header_mark ::= "deferred" "expanded" "frozen"
Obsolete ::=
"obsolete" MessageMessage ::= Manifest_string
Features ::=
Feature_clauseFeature_clause ::= "feature" Clients Header_comment Feature_declaration_list
Feature_declaration_list ::= Feature_declaration ";"
Header_comment ::= Comment
Feature_declaration ::= New_feature_list Declaration_body
Declaration_body ::= Formal_arguments Query_mark Feature_value
Query_mark ::=
Type_mark Assigner_markType_mark ::=
":" TypeFeature_value ::= Explicit_value Obsolete Header_comment Attribute_or_routine
Explicit_value ::=
"=" Manifest_constantNew_feature_list ::= New_feature ","
New_feature ::= "frozen" Extended_feature_name
Attribute_or_routine ::= Precondition Local_declarations Feature_body Postcondition Rescue "end"
Feature_body ::= Deferred Effective_routine Attribute
Extended_feature_name ::=
Feature_name AliasFeature_name ::= Identifier
Alias ::= "alias" """ Alias_name """ "convert"
Alias_name ::= Operator Bracket
Bracket ::=
"[]"Operator ::= Unary Binary
Unary ::= "not" "+" "-" Free_unary
Binary ::= "+" "-" "*" "/" "//" "\\" "^" ".." "<" ">" "<=" ">=" "and" "or" "xor" "and" "then" "or" "else" "implies" Free_binary
Assigner_mark ::=
"assign" Feature_nameInheritance ::=
Inherit_clauseInherit_clause ::= "inherit" Non_conformance Parent_list
Non_conformance ::= "{" "NONE" "}"
Parent_list ::= Parent ";"
Parent ::=
Class_type Feature_adaptationFeature_adaptation ::= Undefine Redefine Rename New_exports Select "end"
Rename ::=
"rename" Rename_listRename_list ::= Rename_pair ","
Rename_pair ::=
Feature_name "as" Extended_feature_nameClients ::= "{" Class_list "}"
Class_list ::= Class_name ","
New_exports ::=
"export" New_export_listNew_export_list ::= New_export_item ";"
New_export_item ::=
Clients Header_comment Feature_setFeature_set ::=
Feature_list
"all"Feature_list ::= Feature_name ","
Formal_arguments ::= "(" Entity_declaration_list ")"
Entity_declaration_list ::= Entity_declaration_group ";"
Entity_declaration_group ::= Identifier_list Type_mark
Identifier_list ::= Identifier ","
Deferred ::=
"deferred"Effective_routine ::= Internal External
Internal ::= Routine_mark Compound
Routine_mark ::=
"do"
OnceOnce ::= "once" "(" Key_list ")"
Key_list ::= Manifest_string ","
Local_declarations ::= "local" Entity_declaration_list
Compound ::= Instruction ";"
Instruction ::= Creation_instruction Call Assignment Assigner_call Conditional Multi_branch Loop Debug Precursor Check Retry
Precondition ::= "require" "else" Assertion
Postcondition ::= "ensure" "then" Assertion Only
Invariant ::=
"invariant" AssertionAssertion ::= Assertion_clause ";"
Assertion_clause ::=
Tag_mark Unlabeled_assertion_clauseUnlabeled_assertion_clause ::= Boolean_expression Comment
Tag_mark ::=
Tag ":"Tag ::= Identifier
Old ::=
"old" ExpressionOnly ::= "only" Feature_list
Check ::= "check" Assertion Notes "end"
Variant ::= "variant" Tag_mark Expression
Precursor ::= Precursor Parent_qualification Actuals
Parent_qualification ::= "{" Class_name "}"
Redefine ::=
"redefine" Feature_listUndefine ::=
"undefine" Feature_listType ::= 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_generics ::= "[" Type_list "]"
Type_list ::= Type ","
Formal_generics ::= "[" Formal_generic_list "]"
Formal_generic_list ::= Formal_generic ","
Formal_generic ::= "frozen" Formal_generic_name Constraint
Formal_generic_name ::= "?" Identifier
Constraint ::= "->" Constraining_types Constraint_creators
Constraining_types ::= Single_constraint Multiple_constraint
Single_constraint ::=
Type RenamingRenaming ::=
Rename "end"Multiple_constraint ::= "{" Constraint_list "}"
Constraint_list ::= Single_constraint ","
Constraint_creators ::= "create" Feature_list "end"
Tuple_type ::= "TUPLE" Tuple_parameter_list
Tuple_parameter_list ::= "[" Tuple_parameters "]"
Tuple_parameters ::= Type_list Entity_declaration_list
Manifest_tuple ::= "[" Expression_list "]"
Expression_list ::= Expression ","
Converters ::=
"convert" Converter_listConverter_list ::= Converter ","
Converter ::= Conversion_procedure Conversion_query
Conversion_procedure ::= Feature_name "({" Type_list "})"
Conversion_query ::= Feature_name ":{" Type_list "}"
Select ::=
"select" Feature_listConditional ::= "if" Then_part_list Else_part "end"
Then_part_list ::= Then_part "elseif"
Then_part ::=
Boolean_expression "then" CompoundElse_part ::=
"else" CompoundMulti_branch ::= "inspect" Expression When_part_list Else_part "end"
When_part_list ::=
When_partWhen_part ::= "when" Choices "then" Compound
Choices ::= Choice ","
Choice ::= Constant Manifest_type Constant_interval Type_interval
Constant_interval ::=
Constant ".." ConstantType_interval ::=
Manifest_type ".." Manifest_typeLoop ::= Initialization Invariant Exit_condition Loop_body Variant "end"
Initialization ::=
"from" CompoundExit_condition ::=
"until" Boolean_expressionLoop_body ::=
"loop" CompoundDebug ::= "debug" "(" Key_list ")" Compound "end"
Attribute ::=
"attribute" CompoundEntity ::= 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 ::=
Creation_clauseCreation_clause ::= "create" Clients Header_comment Creation_procedure_list
Creation_procedure_list ::= Creation_procedure ","
Creation_procedure ::= Feature_name
Creation_instruction ::= "create" Explicit_creation_type Creation_call
Explicit_creation_type ::= "{" Type "}"
Creation_call ::=
Variable Explicit_creation_callExplicit_creation_call ::=
"." Unqualified_callCreation_expression ::= "create" Explicit_creation_type Explicit_creation_call
Equality ::= Expression Comparison Expression
Comparison ::= "=" "/=" "~" "/~"
Assignment ::=
Variable ":=" ExpressionAssigner_call ::=
Expression ":=" ExpressionCall ::= Object_call Non_object_call
Object_call ::= Target "." Unqualified_call
Unqualified_call ::=
Feature_name ActualsTarget ::= Local Read_only Call Parenthesized_target
Parenthesized_target ::= "(|" Expression "|)"
Non_object_call ::= "{" Type "}." Unqualified_call
Actuals ::= "(" Actual_list ")"
Actual_list ::= Expression ","
Object_test ::= "{" Identifier ":" Type "}" Expression
Rescue ::=
"rescue" CompoundRetry ::=
"retry"Agent ::= Call_agent Inline_agent
Call_agent ::=
"agent" Call_agent_bodyInline_agent ::= "agent" Formal_arguments Type_mark Attribute_or_routine Agent_actuals
Call_agent_body ::= Agent_qualified Agent_unqualified
Agent_qualified ::=
Agent_target "." Agent_unqualifiedAgent_unqualified ::=
Feature_name Agent_actualsAgent_target ::= Entity Parenthesized Manifest_type
Agent_actuals ::= "(" Agent_actual_list ")"
Agent_actual_list ::= Agent_actual ","
Agent_actual ::= Expression Placeholder
Placeholder ::= Manifest_type "?"
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 Address
Parenthesized ::= "(" Expression ")"
Address ::=
"$" VariableOnce_string ::=
"once" Manifest_stringBoolean_expression ::= Basic_expression Boolean_constant Object_test
Operator_expression ::= Unary_expression Binary_expression
Unary_expression ::= Unary Expression
Binary_expression ::= Expression Binary Expression
Bracket_expression ::= Bracket_target "[" Actuals "]"
Bracket_target ::= Target Once_string Manifest_constant Manifest_tuple
Constant ::= Manifest_constant Constant_attribute
Manifest_constant ::=
Manifest_type Manifest_valueManifest_type ::= "{" Type "}"
Manifest_value ::= Boolean_constant Character_constant Integer_constant Real_constant Manifest_string Manifest_type
Sign ::= "+" "-"
Integer_constant ::=
Sign IntegerCharacter_constant ::= "'" Character "'"
Boolean_constant ::= "True" "False"
Real_constant ::=
Sign RealManifest_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 ::= "]" "}"
External ::= "external" External_language External_name
External_language ::= Unregistered_language Registered_language
Unregistered_language ::= Manifest_string
External_name ::=
"alias" Manifest_stringRegistered_language ::= C_external CPP_external DLL_external
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 ::=
"use" External_file_listExternal_file_list ::= External_file ","
External_file ::= External_user_file External_system_file
External_user_file ::= """ Simple_string """
External_system_file ::= "<" Simple_string ">"
C_external ::= "’"" "C" "’" "inline" External_signature External_file_use """
CPP_external ::= """ "C++" "inline" External_signature External_file_use """
DLL_external ::= """ "dll" "windows" DLL_identifier DLL_index External_signature External_file_use """
DLL_identifier ::= Simple_string
DLL_index ::= Integer
Comment ::= "- -" Simple_string Comment_break
Comment_break ::= New_line Blanks_or_tabs "--"
Integer ::=
Integer_base Digit_sequenceInteger_base ::=
"0" Integer_base_letterInteger_base_letter ::= "b" "c" "x" "B" "C" "X"
Digit_sequence ::=
DigitDigit ::= "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "a" "b" "c" "d" "e" "f" "A" "B" "C" "D" "E" "F" "_"