smacc/parser.txt
author Jan Vrany <jan.vrany@fit.cvut.cz>
Sat, 15 Dec 2012 23:25:19 +0100
branchdevelopment
changeset 1883 b36e52129040
parent 1818 2e5ed72e7dfd
child 2380 9195eccdcbd9
permissions -rw-r--r--
Initial implementation of JavaCompiler using Oracle javac toolbox. Not yet finished.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
752
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
     1
%id <LT> ;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
     2
%id <GT> ;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
     3
%id <IDENTIFIER> ;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
     4
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
     5
goal : compilation_unit
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
     6
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
     7
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
     8
# 19.3) Lexical Structure.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
     9
literal :       <INTEGER_LITERAL>
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    10
	|       <FLOATING_POINT_LITERAL>
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    11
	|       <BOOLEAN_LITERAL>
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    12
#       |       "true"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    13
#       |       "false"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    14
	|       <CHARACTER_LITERAL>
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    15
	|       <STRING_LITERAL>
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    16
	|       <NULL_LITERAL>
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    17
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    18
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    19
# 19.4) Types, Values, and Variables
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    20
type    :       primitive_type
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    21
		{
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    22
		    '1' first
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    23
		}
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    24
	|       reference_type
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    25
		{
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    26
		    '1' first
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    27
		}
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    28
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    29
primitive_type :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    30
		numeric_type
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    31
	|       "boolean"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    32
        {
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    33
            Array with: 
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    34
                (JavaBooleanTypeNode new
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    35
                    token: '1').
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    36
        }
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    37
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    38
numeric_type:   integral_type
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    39
	|       floating_point_type
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    40
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    41
integral_type :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    42
		"byte"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    43
        {
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    44
            JavaByteTypeNode new
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    45
                token: '1'.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    46
        }
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    47
	|       "short"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    48
        {
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    49
            JavaShortTypeNode new
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    50
                token: '1'.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    51
        }
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    52
	|       "int"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    53
        {
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    54
            JavaIntTypeNode new
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    55
                token: '1'.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    56
        }
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    57
	|       "long"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    58
        {
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    59
            JavaLongTypeNode new
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    60
                token: '1'.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    61
        }
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    62
	|       "char"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    63
        {
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    64
            JavaCharTypeNode new
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    65
                token: '1'.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    66
        }
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    67
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    68
floating_point_type :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    69
		"float"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    70
        {
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    71
            JavaFloatTypeNode new
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    72
                token: '1'.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    73
        }
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    74
	|       "double"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    75
        {
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    76
            JavaDoubleTypeNode new
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    77
                token: '1'.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    78
        }
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    79
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    80
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    81
reference_type :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    82
		class_or_interface_type
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    83
	|       array_type
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    84
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    85
class_or_interface_type :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    86
		name
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    87
        {
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    88
            JavaClassOrInterfaceTypeNode new
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    89
                token: '1'.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    90
        }
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    91
    |
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    92
		name "<?>"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    93
        {
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    94
            JavaClassOrInterfaceTypeNode new
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    95
                token: '1'.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    96
        }
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    97
    |
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    98
		name "<T>"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
    99
        {
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   100
            JavaClassOrInterfaceTypeNode new
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   101
                token: '1'.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   102
        }
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   103
    |
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   104
		name "<Class<T>>"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   105
        {
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   106
            JavaClassOrInterfaceTypeNode new
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   107
                token: '1'.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   108
        }
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   109
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   110
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   111
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   112
class_type :    class_or_interface_type;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   113
interface_type : class_or_interface_type;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   114
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   115
array_type :    primitive_type dims
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   116
        {
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   117
            JavaArrayTypeNode new
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   118
                token: '1'
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   119
        }
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   120
	|       name dims
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   121
        {
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   122
            JavaArrayTypeNode new
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   123
                token: '1'
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   124
        }
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   125
	|       name "<T>" dims
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   126
       {
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   127
            JavaArrayTypeNode new
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   128
                token: '1'
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   129
        }
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   130
   |       name "<Class<T>>" dims
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   131
        {
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   132
            JavaArrayTypeNode new
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   133
                token: '1'
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   134
        }
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   135
	|       name "<Class<?>>" dims
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   136
        {
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   137
            JavaArrayTypeNode new
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   138
                token: '1'
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   139
        }
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   140
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   141
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   142
# 19.5) Names
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   143
name    :       simple_name
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   144
	|       qualified_name
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   145
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   146
simple_name :   <IDENTIFIER>
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   147
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   148
qualified_name :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   149
		name "." <IDENTIFIER>
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   150
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   151
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   152
# 19.6) "package"s
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   153
compilation_unit :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   154
		package_declaration_opt
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   155
		import_declarations_opt
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   156
		type_declarations_opt
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   157
		;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   158
package_declaration_opt : package_declaration | ;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   159
import_declarations_opt : import_declarations | ;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   160
type_declarations_opt   : type_declarations   | ;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   161
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   162
import_declarations :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   163
		import_declaration
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   164
	|       import_declarations import_declaration
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   165
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   166
type_declarations :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   167
		type_declaration
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   168
	|       type_declarations type_declaration
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   169
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   170
package_declaration :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   171
		"package" name ";"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   172
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   173
import_declaration :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   174
		single_type_import_declaration
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   175
	|       type_import_on_demand_declaration
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   176
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   177
single_type_import_declaration :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   178
		"import" name ";"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   179
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   180
type_import_on_demand_declaration :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   181
		"import" name "." "*" ";"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   182
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   183
type_declaration :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   184
		class_declaration
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   185
	|       interface_declaration
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   186
	|       ";"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   187
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   188
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   189
# 19.7) Productions used only in the LALR(1) grammar
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   190
modifiers_opt:
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   191
	|       modifiers
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   192
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   193
modifiers :     modifier
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   194
	|       modifiers modifier
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   195
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   196
modifier :      "public" | "protected" | "private"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   197
	|       "static"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   198
	|       "abstract" | "final" | "native" | "synchronized" | "transient" | "volatile"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   199
	|       "strictfp" # note that semantic analysis must check that the
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   200
			 # context of the modifier allows strictfp.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   201
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   202
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   203
# 19.8) Classes
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   204
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   205
# 19.8.1) Class Declaration:
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   206
class_declaration :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   207
	modifiers_opt "class" <IDENTIFIER> super_opt interfaces_opt class_body
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   208
    |
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   209
	modifiers_opt "class" <IDENTIFIER> "<T>" super_opt interfaces_opt class_body
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   210
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   211
super : "extends" class_type
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   212
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   213
super_opt :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   214
	|       super
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   215
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   216
interfaces :    "implements" interface_type_list
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   217
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   218
interfaces_opt:
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   219
	|       interfaces
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   220
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   221
interface_type_list :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   222
		interface_type
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   223
	|       interface_type_list "," interface_type
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   224
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   225
class_body :    "{" class_body_declarations_opt "}"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   226
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   227
class_body_declarations_opt :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   228
	|       class_body_declarations ;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   229
class_body_declarations :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   230
		class_body_declaration
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   231
	|       class_body_declarations class_body_declaration
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   232
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   233
class_body_declaration :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   234
		class_member_declaration
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   235
	|       static_initializer
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   236
	|       constructor_declaration
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   237
	|       block
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   238
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   239
class_member_declaration :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   240
		field_declaration
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   241
	|       method_declaration
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   242
	# repeat the prod for 'class_declaration' here:
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   243
	|       modifiers_opt "class" <IDENTIFIER> super_opt interfaces_opt class_body
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   244
	|       interface_declaration
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   245
	|       ";"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   246
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   247
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   248
# 19.8.2) Field Declarations
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   249
field_declaration :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   250
		modifiers_opt type variable_declarators ";"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   251
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   252
variable_declarators :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   253
		variable_declarator
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   254
	|       variable_declarators "," variable_declarator
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   255
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   256
variable_declarator :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   257
		variable_declarator_id
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   258
	|       variable_declarator_id "=" variable_initializer
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   259
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   260
variable_declarator_id :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   261
		<IDENTIFIER>
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   262
	|       variable_declarator_id "[" "]"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   263
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   264
variable_initializer :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   265
		expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   266
	|       array_initializer
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   267
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   268
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   269
# 19.8.3) Method Declarations
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   270
method_declaration :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   271
		method_header method_body
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   272
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   273
method_header :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   274
		modifiers_opt type method_declarator throws_opt
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   275
		{
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   276
		    JavaMethodNode new
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   277
                javadoc: self scanner lastJavadoc; 
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   278
			    modifiers: '1' ;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   279
			    type: '2';
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   280
			    declarator: '3'
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   281
		}
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   282
	|       modifiers_opt "void" method_declarator throws_opt
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   283
		{
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   284
		    JavaMethodNode new
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   285
                javadoc: self scanner lastJavadoc; 
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   286
			    modifiers: '1' ;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   287
			    type: JavaVoidTypeNode new ;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   288
			    declarator: '3'
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   289
		}
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   290
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   291
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   292
method_declarator :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   293
		method_identifier "(" formal_parameter_list_opt ")"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   294
		{
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   295
		    JavaMethodDeclaratorNode new
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   296
			identifier: '1' first value;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   297
			formalParameterList: '3'
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   298
		}
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   299
	|       method_declarator "[" "]" # deprecated
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   300
	# be careful; the above production also allows 'void foo() []'
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   301
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   302
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   303
method_identifier :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   304
		<IDENTIFIER>
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   305
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   306
formal_parameter_list_opt :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   307
	|       formal_parameter_list
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   308
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   309
formal_parameter_list :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   310
		formal_parameter
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   311
		{
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   312
		   OrderedCollection new
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   313
			add: '1';
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   314
			yourself
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   315
		}
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   316
	|       formal_parameter_list "," formal_parameter
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   317
		{
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   318
		    '1'
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   319
			add: '3';
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   320
			yourself
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   321
		}
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   322
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   323
formal_parameter :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   324
		type variable_declarator_id
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   325
		{
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   326
		    JavaFormalParameterNode new
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   327
			type: '1';
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   328
			variableDeclaratorId: '2' 
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   329
		}
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   330
	|       "final" type variable_declarator_id
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   331
		{
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   332
		    JavaFormalParameterNode new
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   333
			type: '1';
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   334
			variableDeclaratorId: '2' 
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   335
		}
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   336
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   337
throws_opt :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   338
	|       throws
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   339
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   340
throws :        "throws" class_type_list
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   341
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   342
class_type_list :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   343
		class_type
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   344
	|       class_type_list "," class_type
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   345
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   346
method_body :   block
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   347
	|       ";"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   348
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   349
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   350
# 19.8.4) Static Initializers
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   351
static_initializer :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   352
		"static" block
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   353
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   354
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   355
# 19.8.5) Constructor Declarations
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   356
constructor_declaration :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   357
		modifiers_opt constructor_declarator throws_opt
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   358
			constructor_body
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   359
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   360
constructor_declarator :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   361
		simple_name "(" formal_parameter_list_opt ")"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   362
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   363
constructor_body :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   364
		"{" explicit_constructor_invocation
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   365
			block_statements "}"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   366
	|       "{" explicit_constructor_invocation "}"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   367
	|       "{" block_statements "}"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   368
	|       "{" "}"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   369
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   370
explicit_constructor_invocation :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   371
		"this" "(" argument_list_opt ")" ";"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   372
	|       "super" "(" argument_list_opt ")" ";"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   373
	|       primary "." "this" "(" argument_list_opt ")" ";"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   374
	|       primary "." "super" "(" argument_list_opt ")" ";"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   375
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   376
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   377
# 19.9) Interfaces
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   378
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   379
# 19.9.1) Interface Declarations
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   380
interface_declaration :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   381
		modifiers_opt "interface" <IDENTIFIER> extends_interfaces_opt
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   382
			interface_body
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   383
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   384
extends_interfaces_opt :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   385
	|       extends_interfaces
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   386
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   387
extends_interfaces :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   388
		"extends" interface_type
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   389
	|       extends_interfaces "," interface_type
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   390
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   391
interface_body :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   392
		"{" interface_member_declarations_opt "}"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   393
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   394
interface_member_declarations_opt :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   395
	|       interface_member_declarations
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   396
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   397
interface_member_declarations :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   398
		interface_member_declaration
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   399
	|       interface_member_declarations interface_member_declaration
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   400
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   401
interface_member_declaration :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   402
		constant_declaration
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   403
	|       abstract_method_declaration
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   404
	|       class_declaration
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   405
	|       interface_declaration
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   406
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   407
constant_declaration :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   408
		field_declaration
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   409
	# need to semantically check that modifiers of field declaration
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   410
	# include only PUBLIC, "static", or "final".  Other modifiers are
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   411
	# disallowed.
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   412
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   413
abstract_method_declaration :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   414
		method_header ";"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   415
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   416
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   417
# 19.10) Arrays
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   418
array_initializer :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   419
		"{" variable_initializers "," "}"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   420
	|       "{" variable_initializers "}"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   421
	|       "{" "," "}"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   422
	|       "{" "}"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   423
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   424
variable_initializers :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   425
		variable_initializer
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   426
	|       variable_initializers "," variable_initializer
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   427
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   428
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   429
# 19.11) Blocks and Statements
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   430
block : "{" block_statements_opt "}"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   431
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   432
block_statements_opt :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   433
	|       block_statements
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   434
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   435
block_statements :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   436
		block_statement
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   437
	|       block_statements block_statement
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   438
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   439
block_statement :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   440
		local_variable_declaration_statement
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   441
	|       statement
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   442
	|       class_declaration
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   443
	|       interface_declaration
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   444
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   445
local_variable_declaration_statement :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   446
		local_variable_declaration ";"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   447
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   448
local_variable_declaration :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   449
		type variable_declarators
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   450
	|       "final" type variable_declarators
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   451
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   452
statement :     statement_without_trailing_substatement
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   453
	|       labeled_statement
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   454
	|       if_then_statement
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   455
	|       if_then_else_statement
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   456
	|       while_statement
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   457
	|       for_statement
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   458
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   459
statement_no_short_if :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   460
		statement_without_trailing_substatement
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   461
	|       labeled_statement_no_short_if
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   462
	|       if_then_else_statement_no_short_if
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   463
	|       while_statement_no_short_if
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   464
	|       for_statement_no_short_if
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   465
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   466
statement_without_trailing_substatement :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   467
		block
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   468
	|       empty_statement
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   469
	|       expression_statement
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   470
	|       switch_statement
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   471
	|       do_statement
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   472
	|       break_statement
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   473
	|       continue_statement
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   474
	|       return_statement
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   475
	|       synchronized_statement
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   476
	|       throw_statement
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   477
	|       try_statement
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   478
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   479
empty_statement :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   480
		";"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   481
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   482
labeled_statement :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   483
		<IDENTIFIER> ":" statement
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   484
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   485
labeled_statement_no_short_if :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   486
		<IDENTIFIER> ":" statement_no_short_if
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   487
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   488
expression_statement :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   489
		statement_expression ";"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   490
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   491
statement_expression :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   492
		assignment
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   493
	|       preincrement_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   494
	|       predecrement_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   495
	|       postincrement_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   496
	|       postdecrement_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   497
	|       method_invocation
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   498
	|       class_instance_creation_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   499
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   500
if_then_statement :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   501
		"if" "(" expression ")" statement
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   502
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   503
if_then_else_statement :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   504
		"if" "(" expression ")" statement_no_short_if
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   505
			"else" statement
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   506
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   507
if_then_else_statement_no_short_if :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   508
		"if" "(" expression ")" statement_no_short_if
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   509
			"else" statement_no_short_if
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   510
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   511
switch_statement :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   512
		"switch" "(" expression ")" switch_block
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   513
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   514
switch_block :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   515
		"{" switch_block_statement_groups switch_labels "}"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   516
	|       "{" switch_block_statement_groups "}"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   517
	|       "{" switch_labels "}"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   518
	|       "{" "}"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   519
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   520
switch_block_statement_groups :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   521
		switch_block_statement_group
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   522
	|       switch_block_statement_groups switch_block_statement_group
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   523
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   524
switch_block_statement_group :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   525
		switch_labels block_statements
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   526
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   527
switch_labels :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   528
		switch_label
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   529
	|       switch_labels switch_label
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   530
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   531
switch_label :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   532
		"case" constant_expression ":"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   533
	|       "default" ":"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   534
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   535
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   536
while_statement :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   537
		"while" "(" expression ")" statement
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   538
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   539
while_statement_no_short_if :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   540
		"while" "(" expression ")" statement_no_short_if
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   541
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   542
do_statement :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   543
		"do" statement "while" "(" expression ")" ";"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   544
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   545
for_statement :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   546
		"for" "(" for_init_opt ";" expression_opt ";"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   547
			for_update_opt ")" statement
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   548
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   549
for_statement_no_short_if :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   550
		"for" "(" for_init_opt ";" expression_opt ";"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   551
			for_update_opt ")" statement_no_short_if
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   552
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   553
for_init_opt :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   554
	|       for_init
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   555
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   556
for_init :      statement_expression_list
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   557
	|       local_variable_declaration
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   558
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   559
for_update_opt :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   560
	|       for_update
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   561
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   562
for_update :    statement_expression_list
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   563
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   564
statement_expression_list :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   565
		statement_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   566
	|       statement_expression_list "," statement_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   567
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   568
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   569
identifier_opt :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   570
	|       <IDENTIFIER>
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   571
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   572
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   573
break_statement :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   574
		"break" identifier_opt ";"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   575
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   576
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   577
continue_statement :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   578
		"continue" identifier_opt ";"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   579
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   580
return_statement :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   581
		"return" expression_opt ";"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   582
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   583
throw_statement :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   584
		"throw" expression ";"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   585
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   586
synchronized_statement :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   587
		"synchronized" "(" expression ")" block
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   588
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   589
try_statement :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   590
		"try" block catches
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   591
	|       "try" block catches_opt finally
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   592
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   593
catches_opt :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   594
	|       catches
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   595
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   596
catches :       catch_clause
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   597
	|       catches catch_clause
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   598
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   599
catch_clause :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   600
		"catch" "(" formal_parameter ")" block
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   601
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   602
finally :       "finally" block
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   603
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   604
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   605
# 19.12) Expressions
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   606
primary :       primary_no_new_array
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   607
	|       array_creation_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   608
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   609
primary_no_new_array :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   610
		literal
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   611
	|       "this"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   612
	|       "(" expression ")"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   613
	|       class_instance_creation_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   614
	|       field_access
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   615
	|       method_invocation
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   616
	|       array_access
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   617
	|       primitive_type "." "class"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   618
	|       "void" "." "class"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   619
	|       array_type "." "class"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   620
	|       name "." "class"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   621
	|       name "." "this"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   622
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   623
class_instance_creation_expression :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   624
		"new" class_type "(" argument_list_opt ")"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   625
	|       "new" class_type "(" argument_list_opt ")" class_body
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   626
	|       primary "." "new" <IDENTIFIER>
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   627
			"(" argument_list_opt ")"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   628
	|       primary "." "new" <IDENTIFIER>
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   629
			"(" argument_list_opt ")" class_body
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   630
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   631
argument_list_opt :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   632
	|       argument_list
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   633
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   634
argument_list :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   635
		expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   636
	|       argument_list "," expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   637
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   638
array_creation_expression :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   639
		"new" primitive_type dim_exprs dims_opt
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   640
	|       "new" class_or_interface_type dim_exprs dims_opt
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   641
	|       "new" primitive_type dims array_initializer
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   642
	|       "new" class_or_interface_type dims array_initializer
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   643
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   644
dim_exprs :     dim_expr
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   645
	|       dim_exprs dim_expr
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   646
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   647
dim_expr :      "[" expression "]"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   648
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   649
dims_opt :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   650
	|       dims
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   651
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   652
dims :  "[" "]"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   653
	|       dims "[" "]"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   654
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   655
field_access :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   656
		primary "." <IDENTIFIER>
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   657
	|       "super" "." <IDENTIFIER>
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   658
	|       name "." "super" "." <IDENTIFIER>
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   659
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   660
method_invocation :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   661
		name "(" argument_list_opt ")"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   662
	|       primary "." <IDENTIFIER> "(" argument_list_opt ")"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   663
	|       "super" "." <IDENTIFIER> "(" argument_list_opt ")"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   664
	|       name "." "super" "." <IDENTIFIER> "(" argument_list_opt ")"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   665
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   666
array_access :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   667
		name "[" expression "]"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   668
	|       primary_no_new_array "[" expression "]"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   669
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   670
postfix_expression :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   671
		primary
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   672
	|       name
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   673
	|       postincrement_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   674
	|       postdecrement_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   675
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   676
postincrement_expression :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   677
		postfix_expression "++"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   678
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   679
postdecrement_expression :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   680
		postfix_expression "--"
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   681
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   682
unary_expression :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   683
		preincrement_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   684
	|       predecrement_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   685
	|       "+" unary_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   686
	|       "-" unary_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   687
	|       unary_expression_not_plus_minus
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   688
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   689
preincrement_expression :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   690
		"++" unary_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   691
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   692
predecrement_expression :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   693
		"--" unary_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   694
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   695
unary_expression_not_plus_minus :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   696
		postfix_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   697
	|       "~" unary_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   698
	|       "!" unary_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   699
	|       cast_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   700
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   701
cast_expression :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   702
		"(" primitive_type dims_opt ")" unary_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   703
	|       "(" expression ")" unary_expression_not_plus_minus
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   704
	|       "(" name dims ")" unary_expression_not_plus_minus
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   705
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   706
multiplicative_expression :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   707
		unary_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   708
	|       multiplicative_expression "*" unary_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   709
	|       multiplicative_expression "/" unary_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   710
	|       multiplicative_expression "%" unary_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   711
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   712
additive_expression :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   713
		multiplicative_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   714
	|       additive_expression "+" multiplicative_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   715
	|       additive_expression "-" multiplicative_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   716
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   717
shift_expression :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   718
		additive_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   719
	|       shift_expression "<<" additive_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   720
	|       shift_expression ">>" additive_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   721
	|       shift_expression ">>>" additive_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   722
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   723
relational_expression :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   724
		shift_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   725
	|       relational_expression <LT> shift_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   726
	|       relational_expression <GT> shift_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   727
	|       relational_expression "<=" shift_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   728
	|       relational_expression ">=" shift_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   729
	|       relational_expression "instanceof" reference_type
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   730
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   731
equality_expression :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   732
		relational_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   733
	|       equality_expression "==" relational_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   734
	|       equality_expression "!=" relational_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   735
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   736
and_expression :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   737
		equality_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   738
	|       and_expression "&" equality_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   739
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   740
exclusive_or_expression :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   741
		and_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   742
	|       exclusive_or_expression "^" and_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   743
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   744
inclusive_or_expression :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   745
		exclusive_or_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   746
	|       inclusive_or_expression "|" exclusive_or_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   747
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   748
conditional_and_expression :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   749
		inclusive_or_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   750
	|       conditional_and_expression "&&" inclusive_or_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   751
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   752
conditional_or_expression :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   753
		conditional_and_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   754
	|       conditional_or_expression "||" conditional_and_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   755
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   756
conditional_expression :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   757
		conditional_or_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   758
	|       conditional_or_expression "?" expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   759
			":" conditional_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   760
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   761
assignment_expression :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   762
		conditional_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   763
	|       assignment
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   764
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   765
assignment :    left_hand_side assignment_operator assignment_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   766
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   767
left_hand_side :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   768
		name
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   769
	|       field_access
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   770
	|       array_access
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   771
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   772
assignment_operator :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   773
		"="
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   774
	|       "*="
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   775
	|       "/="
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   776
	|       "%="
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   777
	|       "+="
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   778
	|       "-="
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   779
	|       "<<="
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   780
	|       ">>="
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   781
	|       ">>>="
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   782
	|       "&="
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   783
	|       "^="
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   784
	|       "|="
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   785
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   786
expression_opt :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   787
	|       expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   788
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   789
expression :    assignment_expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   790
	;
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   791
constant_expression :
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   792
		expression
ff7bc6428c9c branch jk_new_structure resurrected
vranyj1
parents:
diff changeset
   793
	;