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