++ manifest_or_type_test_expression -> manifest_or_type_test [ "." after_a_dot ] ++ manifest_or_type_test -> integer | ++ real | ++ "{" type_mark integer "}" | ++ "{" type_mark real "}" | ++ open_argument | ++ "{" type_mark "} ?:= expression | ++ "{" type_mark [ { expression "," ... } ] "<<" { expression "," ...} ">>" "}" ++ open_argument -> "{" type_mark "}" When True, the result is made available in `last_expression'. u
++ formal_arg_list -> ["(" {declaration_group ";" ...} ")"] ++ declaration_group -> {identifier "," ...}+ ":" type_mark
++ local_var_list -> [{declaration_group ";" ...}]
++ actuals -> "(" {actual "," ...} ")" ++
++ actuals -> "(" {actual "," ...} ")" ++ ^ ++
++ after_a_dot -> identifier [actuals] ["." after_a_dot] ++
++ alias_parentheses -> "(" {actual "," ...} ")" ++ ^
++ alias_brackets -> "[" {actual "," ...} "]" ++ ^
++ assignment_or_procedure_call -> "(" expression ")" r10 | ++ "Precursor" ["{" type_mark "}"] [actuals] r10 | ++ "Current" r10 | ++ "Result" r10 | ++ local_variable r10 | ++ formal_argument r10 | ++ writable ":=" expression | ++ writable "?=" expression | ++ writable "::=" expression | ++ identifier procedure_call ++
++ assertion -> {assertion_clause ";" ...}
++ binary -> "<=" | ">=" | "//" | "\\" | ++ "+" | "-" | "*" | "/" | "<" | ">" | "^" | ++ xor" | "implies" | "and then" | "and" | ++ "or else" | "or" | "#+" | "#-" | "#*" ++ t
++ class_declaration -> [indexing] ++ ["expanded" | "deferred" | "separate"] ++ "class" class_text_name ++ ["[" formal_generic_list "]"] ++ [comment] ++ ["obsolete" manifest_string] ++ ["inherit" inherit_text] ++ ["insert" inherit_text] ++ {{"creation"|"create"} creation_clause ...} ++ ["convert" convert_clause] ++ {"feature" feature_clause ...} ++ ["invariant" assertion] ++ [indexing] ++ "end" ++
++ base_type_mark -> "ANY" | ARRAY "[" type_mark "]" | "BOOLEAN" | ++ "CHARACTER" | "DOUBLE" | "INTEGER" | ++ "POINTER" | "REAL" | "STRING" | "TUPLE" | ++ "ROUTINE" | "PROCEDURE" | "FUNCTION" | "PREDICATE" ++ ++ static_type_mark -> base_type_mark | ++ class_text_name ["[" {type_mark "," ...} "]"] ++
++ conversion_list -> type_mark_list ++
++ clients -> type_mark_list ++
++ type_mark_list -> "{" { class_text_name "," ... } "}" ++
++ compound -> {instruction ";" ...}
++ conditional_exp -> "if" expression "then" expression ++ [ {"elseif" expression "then" expression ...}+ ] ++ [ "else" expression ] ++ "end" ++
++ conditional -> "if" expression "then" compound ++ [ {"elseif" expression "then" compound ...}+ ] ++ [ "else" compound ] ++ "end" ++
++ then_compound -> "then" compound
++ then_exp -> "then" expression
++ c_inline_c -> "c_inline_c" "(" manifest_string ")" ++
++ c_inline_h -> "c_inline_h" "(" manifest_string ")" ++
++ create_instruction -> "create" ["{" type "}"] writable ++ ["." procedure_name [actuals]] ++
++ create_expression -> "create" "{" type "}" ["." procedure_name [actuals]] ++
++ creation_clause -> [clients] [comment] feature_list ++
++ convert_clause -> {feature_name conversion_clause ...}
++ conversion_clause -> conversion_procedure | ++ conversion_query ++
++ conversion_procedure -> '(' conversion_list ')' ++
++ debug -> "debug" "(" {manifest_string "," ...} ")" ++ compound "end" ++
++ expression -> "<<" { expression "," ... } ">>" | ++ e1 r1 ++
++ e8 -> "not" e8 | ++ "+" e8 | ++ "-" e8 | ++ free_operator e8 ! ++ e9 ++
++ e10 -> "(" expression ")" r10 | ++ "[" {Expression "," ...} "]" | ++ "True" | "False" | ++ "?" | ++ character_constant | ++ manifest_string | ++ manifest_or_type_test | ++ "Precursor" ["{" type_mark "}"] [actuals] r10 | ++ "agent" expression | ++ "Result" r10 | ++ "Current" r10 | ++ "Void" r10 | ++ local_variable r10 | ++ argument r10 | ++ identifier ?:= expression ++ function_call r10 | ++ a_condition_exp r10 ++
++ inline_agent -> formal_arg_list ++ [":" type] ++ "is" routine ++
++ external -> "<external-specification>" external_name ++ external_name -> ["alias" manifest_string] ++
++ feature_name_list -> {feature_name "," ...}
++ feature_name -> prefix | ++ infix | ++ simple_feature_name ++
++ feature_clause -> [clients] [comment] feature_declaration_list ++
++ feature_declaration -> {["frozen"] feature_name "," ...}+ ++ formal_arg_list ++ [":" type] ++ ["is" "unique" | ++ "is" manifest_constant | ++ "is" routine] ++
++ formal_generic_list -> ["[" {formal_generic "," ...} "]"] ++ formal_generic -> class_text_name ["->" static_type_mark] ++
++ index_clause -> [identifier ":"] {index_value "," ...}+ ++
++ index_value -> identifier | manifest_constant ++
++ indexing -> "indexing" {index_clause ";" ...}
++ infix -> "infix" """ binary """ ++ "infix" """ free_operator """ ++
++ instruction -> check | debug | conditional | retry | ++ inspect | loop | old_creation | ++ c_inline_c | c_inline_h | ++ create_instruction | ++ assignment_or_procedure_call [":=" expression ] ++ expression [":=" expression ] ++
++ loop -> "from" compound ++ ["invariant"] assertion ++ ["variant" [identifier ":"] expression] ++ "until" expression ++ "loop" compound ++ "end" ++
++ new_export_list -> ["export" {new_export_item ";" ...}]
++ inherit_text -> ["external" ***] ++ ["inherit" {parent ";" ...}]
++ parent -> static_type_mark ++ ["rename" rename_list] ++ new_export_list ++ ["undefine" feature_name_list] ++ ["redefine" feature_name_list] ++ ["end"] ++
++ alias -> "alias" """ unary """ ++ "alias" """ free_operator """ ++
++ prefix -> "prefix" """ unary """ ++ "prefix" """ free_operator """ ++
++ rename_list -> {rename_pair "," ...}
++ routine -> [indexing] ++ ["obsolete" manifest_string] ++ ["require" ["else"] assertion] ++ ["local" entity_declaration_list] ++ routine_body ++ ["ensure" ["then"] assertion] ++ ["rescue" compound] ++ "end" ++
++ routine_body -> "deferred" | ++ "external" external | ++ "do" compound ( "then" expression )?
++ r1 -> "implies" e1 r1 | ++ ^ ++
++ r2 -> "or else" e2 r2 | ++ "or" e2 r2 | ++ "xor" e2 r2 | ++ ^ ++
++ r3 -> "and then" e3 r3 | ++ "and" e3 r3 | ++ ^ ++
++ r4 -> "=" e4 r4 | ++ "/=" e4 r4 | ++ "<=" e4 r4 | ++ "<" e4 r4 | ++ ">=" e4 r4 | ++ ">" e4 r4 | ++ ^ ++
++ r5 -> "+" e5 r5 | ++ "-" e5 r5 | ++ ^ ++
++ r6 -> "*" e6 r6 | ++ "//" e6 r6 | ++ "\\" e6 r6 | ++ "/" e6 r6 | ++ ^ ++
++ r7 -> "^" e7 r7 | ++ ^ ++
++ r8 -> free_operator e8 r8 | ++ ^ ++
++ r10 -> "."
++ type_mark -> static_type_mark | ++ formal_generic_type_mark | ++ "like" "Current" | ++ "like" feature_name | ++ "like" argument | ++ "separate" static_type_mark ++
++ when_part -> "when" {when_part_item "," ...}