++ 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 "," ...}