graamar
compilation_unit ::=
( definition )+
definition ::=
[ placement_specifier ] definition_statement
placement_specifier ::=
in
· package_list · :
package_list ::=
package_name ( , · package_name )*
package_name ::=
value_expression
definition_statement ::=
class_definition
| type_definition
| variable_or_function_definition
| method_definition
| operator_definition
| property_definition
| package_definition
| scope_promotion_definition
| alias_definition
| label_definition
class_definition ::=
type_definition ::=
typedef
· datatype [ compiler_tags
] identifier
datatype ::=
| class_definition
| entity_expression
variable_or_function_definition ::=
datatype [ compiler_tags
] identifier
( function_details | ( [ assignment_operator · expression
];
)
function_details ::=
formal_arguments
[ compiler_tags ] block
formal_arguments ::=
(
· formal_argument ( , · formal_argument )* )
formal_argument ::=
( in
[ out
] | out
) datatype [ compiler_tags
] identifier
method_definition ::=
method
[ compiler_tags ] identifier
· formal_arguments [ compiler_tags
] block
operator_definition ::=
( assignment_operator_definition_signature
| qualifying_operator_definition_signature
| unary_operator_definition_signature
| binary_operator_definition_signature
| boolean_operator_definition_signature
| enclosing_operator_definition_signature )
[ compiler_tags ]
block
assignment_operator_definition ::=
assignop
· operator
(
· formal_argument [ , formal_argument ] · )
qualifying_operator_definition ::=
qualop
· operator
(
· formal_argument · )
unary_operator_definition ::=
( preop
| postop
) datatype · operator
(
· formal_argument · )
binary_operator_definition ::=
( addop
| mulop
) datatype · operator
(
· formal_argument · , · formal_argument · )
boolean_operator_definition ::=
( relop
| logop
) operator
(
· formal_argument · , · formal_argument · )
enclosing_operator_definition ::=
enclop datatype · operator · operator
(
· formal_argument · , · formal_argument · )
property_definition ::=
property
· datatype · identifier
[ read
[ write
] expression ]
[ write
expression ]
[ compiler_tags ] ;
package_definition ::=
package
( package_name )
{
[ compiler_tags ]
( package_dependence_clause | package_extension_clause )*
( definition )+
}
package_dependence_clause ::=
depends
on
· dependency_list · ;
dependency_list ::=
package_name ( , · package_name )*
package_extension_clause ::=
extended
in
( any
| none
| package_source_list ) ;
package_source_list ::=
expression ( , · expression )*
scope_promotion_definition ::=
promote
· entity_expression [ entity_expression
] ;
alias_definition ::=
alias
· entity_expression · entity_expression
· ;
label_definition ::=
identifier · :
compiler_tags ::=
({
· compiler_tag ( , compiler_tag )* })
compiler_tag ::=
{see compiler tag reference}
block ::=
sequential_block
| parallel_block
| critical_block
| icode_block
| assembly_block
| machine_code_block
sequential_block ::=
{
[ block_contents ] }
parallel_block ::=
{||
[ block_contents ] ||}
critical_block ::=
{=
[ block_contents ] =}
icode_block ::=
icode
· {
( intermediate_code_statement )+ }
intermediate_code_statement ::=
{see icode reference}
assembly_block ::=
asm
· {
( assembly_code_statement )+ }
assembly_code_statement ::=
{target-dependent}
machine_code_block ::=
raw
· {
( machine_code_statement )+ }
machine_code_statement ::=
numeric_literal · ;
block_contents ::=
[ compiler_tags ] statements
[ exception_clause ] [ cleanup_clause ]
statements ::=
( statement )+
statement ::=
block
| definition_statement
| simple_statement
| assignment_statement
| method_statement
| loop_statement
| if_statement
| switch_statement
exception_clause ::=
( ( exception_block )+ [ default_exception_block ] )
| default_exception_block
exception_block ::=
exception data_type identifier ·
:
· statements
default_exception_block ::=
exception
[ identifier ] : · statements
data_type ::=
identifier
cleanup_clause ::=
cleanup
· :
· statements
simple_statement ::=
exit_statement
| repeat_statement
| fallthrough_statement
| goto_statement
| null_statement
exit_statement ::=
exit
[ identifier ];
repeat_statement ::=
repeat
[ identifier ];
fallthrough_statement ::=
fallthrough
· ;
goto_statement ::=
goto
· identifier · ;
null_statement ::=
;
assign_statement ::=
entity_expression · assignment_operator
[ expression ] ;
| ignore
· expression · ;
method_statement ::=
method_call · ;
loop_statement ::=
loop
[ identifier ]
( plain_or_until_loop_block | with_loop_block | while_loop_block
)
plain_or_until_loop_block ::=
block
[ until_clause · ; ]
with_loop_block ::=
with
· identifier · in · simple_expression
( block [ until_clause
· ;
] | until_clause · ; )
while_loop_block ::=
while
· expression · block
until_clause ::=
until
· expression
if_statement ::=
if
· expression · block
[ else_block ]
else_block ::=
else
( if_statement | block
)
switch_statement ::=
switch
[ all
] [ expression ]
(sequential_switch_block | parallel_switch_block )
sequential_switch_block ::=
{
( case )+ [ default_case
] }
parallel_switch_block ::=
{||
( case )+ [ default_case
] ||}
case ::=
case
· expression_list · : · block
expression_list ::=
expression ( , · expression_list )*
default_case ::=
default
· :
· block
expression ::=
relational_expression
| expression · logical_
precedence_operator · relational_expression
relational_expression ::=
adding_expression
| relational_expression · relational_precedence_operator · adding_expression
adding_expression ::=
multiplying_expression
| adding_expression · add_precedence_operator
· multiplying_expression
multiplying_expression ::=
entity_expression
| multiplying_expression · multiply_precedence_operator · entity_expression
value_expression ::=
entity_expression
| prefix_operator · entity_expression
entity_expression ::=
atomic_expression
| method_call
| entity_expression · qualifying_operator
· identifier
| entity_expression · opening_operator
· expression · closing_operator
| entity_expression · postfix_operator
atomic_expression ::=
identifier
| literal
| (
· expression · )
method_call ::=
entity_expression · ( [ actual_argument_list ] )
actual_argument_list ::=
expression_list
| named_argument_list
named_argument_list ::=
identifier · assignment_operator
· expression
( ,
· identifier · assignment_operator
· expression )*
operator ::=
( operator_symbol )+
| identifier
operator_symbol ::=
~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | - | + | = | [ | ] | { | } | | | \ | ? | < | > | / | , | . | ; | :
assignment_operator ::=
operator
qualifying_operator ::=
operator
add_precedence_operator ::=
operator
multiply_precedence_operator ::=
operator
relational_precedence_operator ::=
operator
logical_precedence_operator ::=
operator
opening_operator ::=
operator
closing_operator ::=
operator
prefix_operator ::=
operator
postfix_operator ::=
operator
identifier ::=
identifier_starting_symbol ( identifier_symbol )*
identifier_starting_symbol ::=
_
| alphabetic_symbol
identifier_symbol ::=
identifier_starting_symbol
| decimal_digit
alphabetic_symbol ::=
{capital and lowercase letters and some international
Unicode characters}
binary_digit ::=
0
| 1
octal_digit ::=
0
| 1
| 2
| 3
| 4
| 5
| 6
| 7
decimal_digit ::=
0
| 1
| 2
| 3
| 4
| 5
| 6
| 7
| 8
| 9
hex_digit ::=
0
| 1
| 2
| 3
| 4
| 5
| 6
| 7
| 8
| 9
| A
| B
| C
| D
| E
| F
literal ::=
numeric_literal
| character_literal
| text_literal
numeric_literal ::=
binary_literal
| octal_literal
| decimal_literal
| hex_literal
binary_literal ::=
0b
( binary_digit )+
octal_literal ::=
0o
( octal_digit )+
decimal_literal ::=
[ 0d
] ( decimal_digit )+
[ .
( decimal_digit )+ ]
[ E
[ +
| -
] ( decimal_digit )+ ]
hex_literal ::=
0x
( hex_digit )+
character_literal ::=
char_quote · character
· char_quote
char_quote ::=
| '
|
character ::=
\\
|
| ''
|
|
| ""
|
| character_value
| {any Unicode character except \, char_quote, or text_quote}
character_value ::=
\
( numeric_literal | ( { · expression · } ) )
text_quote ::=
| "
|
text_literal ::=
text_quote ( character
)* text_quote