Contents | Prev | Next | Index
The syntax of Oberon-2 can be described using a simplified grammar notation, see section Syntax for further information on how to read it. Some language constructs are an extension to standard Oberon-2 and are shown here in a red color. These extensions are usually not needed unless foreign Java classes are being imported and used.
compilation_unit ::= module module ::= program program_id ; package import_list block <identifier> . program ::= foreign MODULE foreign ::= java_foreign ::= <empty> program_id ::= <identifier> package ::= java_package ::= <empty> import_list ::= import ::= <empty> import ::= IMPORT item_list ; item_list ::= item_list , item ::= item item ::= <identifier> ::= <identifier> := <identifier> semicolon ::= ; ::= ; java_throws const_decl_list ::= const_decl_list const_decl ; ::= <empty> const_def ::= identdef = const_expr var_decl_list ::= var_decl_list var_decl ; ::= <empty> const_decl ::= const_def var_decl ::= var_ident_list : type var_ident_list ::= var_ident_list , var_ident ::= var_ident var_ident ::= identdef ::= identdef [ <string> ] ::= identdef java_name procedure_heading ::= procedure proc_id ::= procedure proc_id formal_parameters procedure ::= modifier PROCEDURE modifier ::= java_modifiers ::= <empty> proc_id ::= identdef ::= receiver identdef ::= identdef [ <string> ] ::= receiver identdef [ <string> ] ::= identdef java_name ::= receiver identdef java_name receiver ::= ( VAR <identifier> : <identifier> ) ::= ( <identifier> : <identifier> ) formal_parameters ::= ( ) ::= ( ) : qualident ::= ( fp_section_list ) ::= ( fp_section_list ) : qualident fp_section_list ::= fp_section_list ; fp_section ::= fp_section fp_section ::= VAR id_list : formal_type ::= id_list : formal_type id_list ::= id_list , <identifier> ::= <identifier> formal_type ::= qualident ::= open_array qualident open_array ::= open_array ARRAY OF ::= ARRAY OF qualident ::= qualifier_list . <identifier> ::= <identifier> qualifier_list ::= qualifier_list . qualifier ::= qualifier ident_list ::= ident_list , identdef ::= identdef identdef ::= <identifier> ::= <identifier> * ::= <identifier> - block ::= decl_seq END ::= decl_seq BEGIN stmt_seq END decl_seq ::= decl_list proc_decl_list decl_list ::= decl_list decl ::= <empty> decl ::= CONST const_decl_list ::= VAR var_decl_list ::= TYPE type_decl_list type_decl_list ::= type_decl_list type_decl semicolon ::= <empty> type_decl ::= type_id = type type_id ::= identdef ::= identdef java_name proc_decl_list ::= proc_decl_list procedure_decl ; ::= proc_decl_list forward_decl semicolon ::= <empty> procedure_decl ::= procedure_heading semicolon block <identifier> forward_decl ::= procedure forward_id ::= procedure forward_id formal_parameters forward_id ::= ^ proc_id stmt_seq ::= stmt_seq ; stmt ::= stmt stmt ::= assignment ::= procedure_call ::= if_stmt ::= case_stmt ::= while_stmt ::= repeat_stmt ::= for_stmt ::= loop_stmt ::= guard_stmt ::= EXIT ::= return_stmt ::= <empty> assignment ::= left_designator := expr left_designator ::= designator procedure_call ::= proc_designator ::= proc_designator actual_parameters proc_designator ::= designator actual_parameters ::= ( param_list ) ::= ( ) param_list ::= param_list , param_expr ::= param_expr param_expr ::= expr if_stmt ::= IF boolean_expr then_stmt elsif_stmt_list else_stmt END boolean_expr ::= expr then_stmt ::= THEN stmt_seq elsif_stmt_list ::= elsif_stmt_list elsif_stmt ::= <empty> elsif_stmt ::= ELSIF boolean_expr THEN stmt_seq else_stmt ::= ELSE stmt_seq ::= <empty> case_stmt ::= switch_expr case_list else_case END switch_expr ::= CASE expr OF case_list ::= case_list | case ::= case case ::= case_label_list : stmt_seq ::= <empty> case_label_list ::= case_label_list , case_label ::= case_label case_label ::= const_expr .. const_expr ::= const_expr else_case ::= ELSE stmt_seq ::= <empty> while_stmt ::= WHILE boolean_expr DO stmt_seq END repeat_stmt ::= REPEAT stmt_seq UNTIL boolean_expr loop_stmt ::= LOOP stmt_seq END for_stmt ::= FOR control_list DO stmt_seq END control_list ::= control_assignment to_expr by_expr control_assignment ::= control_var := expr control_var ::= <identifier> to_expr ::= TO expr by_expr ::= BY const_expr ::= <empty> guard_stmt ::= first_guard guard_list default_guard END first_guard ::= WITH rec_designator DO stmt_seq rec_designator ::= qualident : qualident guard_list ::= guard_list next_guard ::= <empty> next_guard ::= | rec_designator DO stmt_seq default_guard ::= ELSE stmt_seq ::= <empty> return_stmt ::= RETURN ::= RETURN expr const_expr ::= expr expr ::= simple_expr relation simple_expr ::= simple_expr simple_expr ::= simple_expr add_operator term ::= term ::= unary term term ::= term mul_operator factor ::= factor factor ::= <character> ::= <integer> ::= <real> ::= <string> ::= set ::= designator ::= func_designator actual_parameters ::= ( expr ) ::= ~ factor set ::= { elem_list } ::= { } elem_list ::= elem_list , elem ::= elem elem ::= elem_expr .. elem_expr ::= elem_expr elem_expr ::= expr func_designator ::= designator relation ::= = ::= # ::= < ::= <= ::= > ::= >= ::= IN ::= IS add_operator ::= + ::= - ::= OR mul_operator ::= * ::= / ::= DIV ::= MOD ::= & unary ::= + ::= - designator ::= designator_id selector_list ::= designator_id designator_id ::= qualident selector_list ::= selector_list selector ::= selector selector ::= . <identifier> ::= [ index_list ] ::= ^ ::= ( qualident ) index_list ::= index_list , index ::= index index ::= expr type ::= simple_type ::= array_type ::= record_type ::= pointer_type ::= procedure_type simple_type ::= qualident array_type ::= ARRAY length_list OF type length_list ::= length_list , length ::= length length ::= const_expr record_type ::= record field_list_seq END ::= record record_base field_list_seq END record ::= modifier RECORD record_base ::= ( parent interface_list ) parent ::= qualident ::= <empty> interface_list ::= interface_list , qualident ::= <empty> field_list_seq ::= field_list_seq ; field_list ::= field_list field_list ::= modifier field_id_list : type ::= <empty> field_id_list ::= field_id_list , field_name ::= field_name field_name ::= identdef ::= identdef java_name pointer_type ::= POINTER TO type ::= POINTER TO open_array type procedure_type ::= procedure formal_parameters ::= procedure
The following comment-embedded compiler directives are only accepted at certain places of an Oberon-2 module and are treated by the above described Oberon-2 language grammar like terminal tokens. They are shown here in red.
java_foreign ::= (*$JAVA FOREIGN *) java_package ::= (*$JAVA PACKAGE <string> *) java_throws ::= (*$JAVA THROWS exception_list *) exception_list ::= exception_list , <identifier> ::= <identifier> java_name ::= (*$JAVA NAME <string> *) java_modifiers ::= (*$JAVA modifier_list *) modifier_list ::= modifier_list modifier ::= modifier modifier ::= PUBLIC ::= PROTECTED ::= PRIVATE ::= ABSTRACT ::= STATIC ::= FINAL ::= TRANSIENT ::= VOLATILE ::= SYNCHRONIZED ::= NATIVE ::= INTERFACE ::= CONSTRUCTOR
Contents | Prev | Next | Index
Canterbury Oberon-2 for Java (Last documentation update
Feb 8, 2000)
Copyright © 1998 Mill Hill &
Canterbury Corporation, Ltd. All rights reserved
Please send any comments or corrections to
mhc@webcom.com