summaryrefslogtreecommitdiff
path: root/gcc/java/parse-scan.y
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/java/parse-scan.y')
-rw-r--r--gcc/java/parse-scan.y1377
1 files changed, 0 insertions, 1377 deletions
diff --git a/gcc/java/parse-scan.y b/gcc/java/parse-scan.y
deleted file mode 100644
index cedba9eb8e3..00000000000
--- a/gcc/java/parse-scan.y
+++ /dev/null
@@ -1,1377 +0,0 @@
-/* Parser grammar for quick source code scan of Java(TM) language programs.
- Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
- Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com)
-
-This file is part of GCC.
-
-GCC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GCC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING. If not, write to
-the Free Software Foundation, 51 Franklin Street, Fifth Floor,
-Boston, MA 02110-1301, USA.
-
-Java and all Java-based marks are trademarks or registered trademarks
-of Sun Microsystems, Inc. in the United States and other countries.
-The Free Software Foundation is independent of Sun Microsystems, Inc. */
-
-/* This file parses Java source code. Action can be further completed
-to achieve a desired behavior. This file isn't part of the Java
-language gcc front end.
-
-The grammar conforms to the Java grammar described in "The Java(TM)
-Language Specification. J. Gosling, B. Joy, G. Steele. Addison Wesley
-1996, ISBN 0-201-63451-1"
-
-Some rules have been modified to support JDK1.1 inner classes
-definitions and other extensions. */
-
-%{
-#define JC1_LITE
-
-#include "config.h"
-#include "system.h"
-#include "coretypes.h"
-#include "tm.h"
-#include "obstack.h"
-#include "toplev.h"
-
-extern FILE *finput, *out;
-
- const char *main_input_filename;
-
-/* Obstack for the lexer. */
-struct obstack temporary_obstack;
-
-/* The current parser context. */
-struct parser_ctxt *ctxp;
-
-/* Error and warning counts, because they're used elsewhere */
-int java_error_count;
-int java_warning_count;
-
-/* Tweak default rules when necessary. */
-static int absorber;
-#define USE_ABSORBER absorber = 0
-
-/* Keep track of the current package name. */
-static const char *package_name;
-
-/* Keep track of whether things have be listed before. */
-static int previous_output;
-
-/* Record modifier uses */
-static int modifier_value;
-
-/* Record (almost) cyclomatic complexity. */
-static int complexity;
-
-/* Keeps track of number of bracket pairs after a variable declarator
- id. */
-static int bracket_count;
-
-/* Numbers anonymous classes */
-static int anonymous_count;
-
-/* This is used to record the current class context. */
-struct class_context
-{
- char *name;
- struct class_context *next;
-};
-
-/* The global class context. */
-static struct class_context *current_class_context;
-
-/* A special constant used to represent an anonymous context. */
-static const char *anonymous_context = "ANONYMOUS";
-
-/* Count of method depth. */
-static int method_depth;
-
-/* Record a method declaration */
-struct method_declarator {
- const char *method_name;
- const char *args;
-};
-#define NEW_METHOD_DECLARATOR(D,N,A) \
-{ \
- (D) = XNEW (struct method_declarator); \
- (D)->method_name = (N); \
- (D)->args = (A); \
-}
-
-/* Two actions for this grammar */
-static int make_class_name_recursive (struct obstack *stack,
- struct class_context *ctx);
-static char *get_class_name (void);
-static void report_class_declaration (const char *);
-static void report_main_declaration (struct method_declarator *);
-static void push_class_context (const char *);
-static void pop_class_context (void);
-
-void report (void);
-
-#include "lex.h"
-#include "parse.h"
-%}
-
-%union {
- char *node;
- struct method_declarator *declarator;
- int value; /* For modifiers */
-}
-
-%{
-extern int flag_assert;
-
-#include "lex.c"
-%}
-
-%pure_parser
-
-/* Things defined here have to match the order of what's in the
- binop_lookup table. */
-
-%token PLUS_TK MINUS_TK MULT_TK DIV_TK REM_TK
-%token LS_TK SRS_TK ZRS_TK
-%token AND_TK XOR_TK OR_TK
-%token BOOL_AND_TK BOOL_OR_TK
-%token EQ_TK NEQ_TK GT_TK GTE_TK LT_TK LTE_TK
-
-/* This maps to the same binop_lookup entry than the token above */
-
-%token PLUS_ASSIGN_TK MINUS_ASSIGN_TK MULT_ASSIGN_TK DIV_ASSIGN_TK
-%token REM_ASSIGN_TK
-%token LS_ASSIGN_TK SRS_ASSIGN_TK ZRS_ASSIGN_TK
-%token AND_ASSIGN_TK XOR_ASSIGN_TK OR_ASSIGN_TK
-
-
-/* Modifier TOKEN have to be kept in this order. Don't scramble it */
-
-%token PUBLIC_TK PRIVATE_TK PROTECTED_TK
-%token STATIC_TK FINAL_TK SYNCHRONIZED_TK
-%token VOLATILE_TK TRANSIENT_TK NATIVE_TK
-%token PAD_TK ABSTRACT_TK MODIFIER_TK
-%token STRICT_TK
-
-/* Keep those two in order, too */
-%token DECR_TK INCR_TK
-
-/* From now one, things can be in any order */
-
-%token DEFAULT_TK IF_TK THROW_TK
-%token BOOLEAN_TK DO_TK IMPLEMENTS_TK
-%token THROWS_TK BREAK_TK IMPORT_TK
-%token ELSE_TK INSTANCEOF_TK RETURN_TK
-%token VOID_TK CATCH_TK INTERFACE_TK
-%token CASE_TK EXTENDS_TK FINALLY_TK
-%token SUPER_TK WHILE_TK CLASS_TK
-%token SWITCH_TK CONST_TK TRY_TK
-%token FOR_TK NEW_TK CONTINUE_TK
-%token GOTO_TK PACKAGE_TK THIS_TK
-%token ASSERT_TK
-
-%token BYTE_TK SHORT_TK INT_TK LONG_TK
-%token CHAR_TK INTEGRAL_TK
-
-%token FLOAT_TK DOUBLE_TK FP_TK
-
-%token ID_TK
-
-%token REL_QM_TK REL_CL_TK NOT_TK NEG_TK
-
-%token ASSIGN_ANY_TK ASSIGN_TK
-%token OP_TK CP_TK OCB_TK CCB_TK OSB_TK CSB_TK SC_TK C_TK DOT_TK
-
-%token STRING_LIT_TK CHAR_LIT_TK INT_LIT_TK FP_LIT_TK
-%token TRUE_TK FALSE_TK BOOL_LIT_TK NULL_TK
-
-%type <node> ID_TK identifier name simple_name qualified_name type
- primitive_type reference_type array_type formal_parameter_list
- formal_parameter class_or_interface_type class_type interface_type
-%type <declarator> method_declarator
-%type <value> MODIFIER_TK
-
-%%
-/* 19.2 Production from 2.3: The Syntactic Grammar */
-goal:
- compilation_unit
-;
-
-/* 19.3 Productions from 3: Lexical structure */
-literal:
- INT_LIT_TK
-| FP_LIT_TK
-| BOOL_LIT_TK
-| CHAR_LIT_TK
-| STRING_LIT_TK
-| NULL_TK
-;
-
-/* 19.4 Productions from 4: Types, Values and Variables */
-type:
- primitive_type
-| reference_type
-;
-
-primitive_type:
- INTEGRAL_TK
- {
- /* use preset global here. FIXME */
- $$ = xstrdup ("int");
- }
-| FP_TK
- {
- /* use preset global here. FIXME */
- $$ = xstrdup ("double");
- }
-| BOOLEAN_TK
- {
- /* use preset global here. FIXME */
- $$ = xstrdup ("boolean");
- }
-;
-
-reference_type:
- class_or_interface_type
-| array_type
-;
-
-class_or_interface_type:
- name
-;
-
-class_type:
- class_or_interface_type /* Default rule */
-;
-
-interface_type:
- class_or_interface_type
-;
-
-array_type:
- primitive_type dims
- {
- while (bracket_count-- > 0)
- $$ = concat ("[", $1, NULL);
- }
-| name dims
- {
- while (bracket_count-- > 0)
- $$ = concat ("[", $1, NULL);
- }
-;
-
-/* 19.5 Productions from 6: Names */
-name:
- simple_name /* Default rule */
-| qualified_name /* Default rule */
-;
-
-simple_name:
- identifier /* Default rule */
-;
-
-qualified_name:
- name DOT_TK identifier
- {
- $$ = concat ($1, ".", $3, NULL);
- }
-;
-
-identifier:
- ID_TK
-;
-
-/* 19.6: Production from 7: Packages */
-compilation_unit:
-| package_declaration
-| import_declarations
-| type_declarations
-| package_declaration import_declarations
-| package_declaration type_declarations
-| import_declarations type_declarations
-| package_declaration import_declarations type_declarations
-;
-
-import_declarations:
- import_declaration
-| import_declarations import_declaration
-;
-
-type_declarations:
- type_declaration
-| type_declarations type_declaration
-;
-
-package_declaration:
- PACKAGE_TK name SC_TK
- { package_name = $2; }
-;
-
-import_declaration:
- single_type_import_declaration
-| type_import_on_demand_declaration
-;
-
-single_type_import_declaration:
- IMPORT_TK name SC_TK
-;
-
-type_import_on_demand_declaration:
- IMPORT_TK name DOT_TK MULT_TK SC_TK
-;
-
-type_declaration:
- class_declaration
-| interface_declaration
-| empty_statement
-;
-
-/* 19.7 Shortened from the original:
- modifiers: modifier | modifiers modifier
- modifier: any of public... */
-modifiers:
- MODIFIER_TK
- {
- if ($1 == PUBLIC_TK)
- modifier_value++;
- if ($1 == STATIC_TK)
- modifier_value++;
- USE_ABSORBER;
- }
-| modifiers MODIFIER_TK
- {
- if ($2 == PUBLIC_TK)
- modifier_value++;
- if ($2 == STATIC_TK)
- modifier_value++;
- USE_ABSORBER;
- }
-;
-
-/* 19.8.1 Production from $8.1: Class Declaration */
-class_declaration:
- modifiers CLASS_TK identifier super interfaces
- {
- report_class_declaration($3);
- modifier_value = 0;
- }
- class_body
-| CLASS_TK identifier super interfaces
- { report_class_declaration($2); }
- class_body
-;
-
-super:
-| EXTENDS_TK class_type
-;
-
-interfaces:
-| IMPLEMENTS_TK interface_type_list
-;
-
-interface_type_list:
- interface_type
- { USE_ABSORBER; }
-| interface_type_list C_TK interface_type
- { USE_ABSORBER; }
-;
-
-class_body:
- OCB_TK CCB_TK
- { pop_class_context (); }
-| OCB_TK class_body_declarations CCB_TK
- { pop_class_context (); }
-;
-
-class_body_declarations:
- class_body_declaration
-| class_body_declarations class_body_declaration
-;
-
-class_body_declaration:
- class_member_declaration
-| static_initializer
-| constructor_declaration
-| block /* Added, JDK1.1, instance initializer */
-;
-
-class_member_declaration:
- field_declaration
-| method_declaration
-| class_declaration /* Added, JDK1.1 inner classes */
-| interface_declaration /* Added, JDK1.1 inner classes */
-| empty_statement
-;
-
-/* 19.8.2 Productions from 8.3: Field Declarations */
-field_declaration:
- type variable_declarators SC_TK
- { USE_ABSORBER; }
-| modifiers type variable_declarators SC_TK
- { modifier_value = 0; }
-;
-
-variable_declarators:
- /* Should we use build_decl_list () instead ? FIXME */
- variable_declarator /* Default rule */
-| variable_declarators C_TK variable_declarator
-;
-
-variable_declarator:
- variable_declarator_id
-| variable_declarator_id ASSIGN_TK variable_initializer
-;
-
-variable_declarator_id:
- identifier
- { bracket_count = 0; USE_ABSORBER; }
-| variable_declarator_id OSB_TK CSB_TK
- { ++bracket_count; }
-;
-
-variable_initializer:
- expression
-| array_initializer
-;
-
-/* 19.8.3 Productions from 8.4: Method Declarations */
-method_declaration:
- method_header
- { ++method_depth; }
- method_body
- { --method_depth; }
-;
-
-method_header:
- type method_declarator throws
- { USE_ABSORBER; }
-| VOID_TK method_declarator throws
-| modifiers type method_declarator throws
- { modifier_value = 0; }
-| modifiers VOID_TK method_declarator throws
- {
- report_main_declaration ($3);
- modifier_value = 0;
- }
-;
-
-method_declarator:
- identifier OP_TK CP_TK
- {
- struct method_declarator *d;
- NEW_METHOD_DECLARATOR (d, $1, NULL);
- $$ = d;
- }
-| identifier OP_TK formal_parameter_list CP_TK
- {
- struct method_declarator *d;
- NEW_METHOD_DECLARATOR (d, $1, $3);
- $$ = d;
- }
-| method_declarator OSB_TK CSB_TK
-;
-
-formal_parameter_list:
- formal_parameter
-| formal_parameter_list C_TK formal_parameter
- {
- $$ = concat ($1, ",", $3, NULL);
- }
-;
-
-formal_parameter:
- type variable_declarator_id
- {
- USE_ABSORBER;
- if (bracket_count)
- {
- int i;
- char *n = XNEWVEC (char, bracket_count + 1 + strlen ($$));
- for (i = 0; i < bracket_count; ++i)
- n[i] = '[';
- strcpy (n + bracket_count, $$);
- $$ = n;
- }
- else
- $$ = $1;
- }
-| modifiers type variable_declarator_id /* Added, JDK1.1 final locals */
- {
- if (bracket_count)
- {
- int i;
- char *n = XNEWVEC (char, bracket_count + 1 + strlen ($2));
- for (i = 0; i < bracket_count; ++i)
- n[i] = '[';
- strcpy (n + bracket_count, $2);
- $$ = n;
- }
- else
- $$ = $2;
- }
-;
-
-throws:
-| THROWS_TK class_type_list
-;
-
-class_type_list:
- class_type
- { USE_ABSORBER; }
-| class_type_list C_TK class_type
- { USE_ABSORBER; }
-;
-
-method_body:
- block
-| SC_TK
-;
-
-/* 19.8.4 Productions from 8.5: Static Initializers */
-static_initializer:
- static block
-;
-
-static: /* Test lval.sub_token here */
- MODIFIER_TK
- { USE_ABSORBER; }
-;
-
-/* 19.8.5 Productions from 8.6: Constructor Declarations */
-/* NOTE FOR FURTHER WORK ON CONSTRUCTORS:
- - If a forbidden modifier is found, the error is either the use of
- a forbidden modifier for a constructor OR bogus attempt to declare a
- method without having specified the return type. FIXME */
-constructor_declaration:
- constructor_declarator throws constructor_body
-| modifiers constructor_declarator throws constructor_body
- { modifier_value = 0; }
-/* extra SC_TK, FIXME */
-| constructor_declarator throws constructor_body SC_TK
-/* extra SC_TK, FIXME */
-| modifiers constructor_declarator throws constructor_body SC_TK
- { modifier_value = 0; }
-/* I'm not happy with the SC_TK addition. It isn't in the grammar and should
- probably be matched by and empty statement. But it doesn't work. FIXME */
-;
-
-constructor_declarator:
- simple_name OP_TK CP_TK
- { USE_ABSORBER; }
-| simple_name OP_TK formal_parameter_list CP_TK
- { USE_ABSORBER; }
-;
-
-constructor_body:
- OCB_TK CCB_TK
-| OCB_TK explicit_constructor_invocation CCB_TK
-| OCB_TK block_statements CCB_TK
-| OCB_TK explicit_constructor_invocation block_statements CCB_TK
-;
-
-/* Error recovery for that rule moved down expression_statement: rule. */
-explicit_constructor_invocation:
- this_or_super OP_TK CP_TK SC_TK
-| this_or_super OP_TK argument_list CP_TK SC_TK
- /* Added, JDK1.1 inner classes. Modified because the rule
- 'primary' couldn't work. */
-| name DOT_TK SUPER_TK OP_TK argument_list CP_TK SC_TK
- { USE_ABSORBER; }
-| name DOT_TK SUPER_TK OP_TK CP_TK SC_TK
- { USE_ABSORBER; }
-;
-
-this_or_super: /* Added, simplifies error diagnostics */
- THIS_TK
-| SUPER_TK
-;
-
-/* 19.9 Productions from 9: Interfaces */
-/* 19.9.1 Productions from 9.1: Interfaces Declarations */
-interface_declaration:
- INTERFACE_TK identifier
- { report_class_declaration ($2); modifier_value = 0; }
- interface_body
-| modifiers INTERFACE_TK identifier
- { report_class_declaration ($3); modifier_value = 0; }
- interface_body
-| INTERFACE_TK identifier extends_interfaces
- { report_class_declaration ($2); modifier_value = 0; }
- interface_body
-| modifiers INTERFACE_TK identifier extends_interfaces
- { report_class_declaration ($3); modifier_value = 0; }
- interface_body
-;
-
-extends_interfaces:
- EXTENDS_TK interface_type
-| extends_interfaces C_TK interface_type
-;
-
-interface_body:
- OCB_TK CCB_TK
- { pop_class_context (); }
-| OCB_TK interface_member_declarations CCB_TK
- { pop_class_context (); }
-;
-
-interface_member_declarations:
- interface_member_declaration
-| interface_member_declarations interface_member_declaration
-;
-
-interface_member_declaration:
- constant_declaration
-| abstract_method_declaration
-| class_declaration /* Added, JDK1.1 inner classes */
-| interface_declaration /* Added, JDK1.1 inner classes */
-| empty_statement
-;
-
-constant_declaration:
- field_declaration
-;
-
-abstract_method_declaration:
- method_header SC_TK
-;
-
-/* 19.10 Productions from 10: Arrays */
-array_initializer:
- OCB_TK CCB_TK
-| OCB_TK variable_initializers CCB_TK
-| OCB_TK C_TK CCB_TK
-| OCB_TK variable_initializers C_TK CCB_TK
-;
-
-variable_initializers:
- variable_initializer
-| variable_initializers C_TK variable_initializer
-;
-
-/* 19.11 Production from 14: Blocks and Statements */
-block:
- OCB_TK CCB_TK
-| OCB_TK block_statements CCB_TK
-;
-
-block_statements:
- block_statement
-| block_statements block_statement
-;
-
-block_statement:
- local_variable_declaration_statement
-| statement
-| class_declaration /* Added, JDK1.1 inner classes */
-;
-
-local_variable_declaration_statement:
- local_variable_declaration SC_TK /* Can't catch missing ';' here */
-;
-
-local_variable_declaration:
- type variable_declarators
- { USE_ABSORBER; }
-| modifiers type variable_declarators /* Added, JDK1.1 final locals */
- { modifier_value = 0; }
-;
-
-statement:
- statement_without_trailing_substatement
-| labeled_statement
-| if_then_statement
-| if_then_else_statement
-| while_statement
-| for_statement
-;
-
-statement_nsi:
- statement_without_trailing_substatement
-| labeled_statement_nsi
-| if_then_else_statement_nsi
-| while_statement_nsi
-| for_statement_nsi
-;
-
-statement_without_trailing_substatement:
- block
-| empty_statement
-| expression_statement
-| switch_statement
-| do_statement
-| break_statement
-| continue_statement
-| return_statement
-| synchronized_statement
-| throw_statement
-| try_statement
-| assert_statement
-;
-
-empty_statement:
- SC_TK
-;
-
-label_decl:
- identifier REL_CL_TK
- { USE_ABSORBER; }
-;
-
-labeled_statement:
- label_decl statement
-;
-
-labeled_statement_nsi:
- label_decl statement_nsi
-;
-
-/* We concentrate here a bunch of error handling rules that we couldn't write
- earlier, because expression_statement catches a missing ';'. */
-expression_statement:
- statement_expression SC_TK
-;
-
-statement_expression:
- assignment
-| pre_increment_expression
-| pre_decrement_expression
-| post_increment_expression
-| post_decrement_expression
-| method_invocation
-| class_instance_creation_expression
-;
-
-if_then_statement:
- IF_TK OP_TK expression CP_TK statement { ++complexity; }
-;
-
-if_then_else_statement:
- IF_TK OP_TK expression CP_TK statement_nsi ELSE_TK statement
- { ++complexity; }
-;
-
-if_then_else_statement_nsi:
- IF_TK OP_TK expression CP_TK statement_nsi ELSE_TK statement_nsi
- { ++complexity; }
-;
-
-switch_statement:
- SWITCH_TK OP_TK expression CP_TK switch_block
-;
-
-switch_block:
- OCB_TK CCB_TK
-| OCB_TK switch_labels CCB_TK
-| OCB_TK switch_block_statement_groups CCB_TK
-| OCB_TK switch_block_statement_groups switch_labels CCB_TK
-;
-
-switch_block_statement_groups:
- switch_block_statement_group
-| switch_block_statement_groups switch_block_statement_group
-;
-
-switch_block_statement_group:
- switch_labels block_statements { ++complexity; }
-;
-
-
-switch_labels:
- switch_label
-| switch_labels switch_label
-;
-
-switch_label:
- CASE_TK constant_expression REL_CL_TK
-| DEFAULT_TK REL_CL_TK
-;
-
-while_expression:
- WHILE_TK OP_TK expression CP_TK { ++complexity; }
-;
-
-while_statement:
- while_expression statement
-;
-
-while_statement_nsi:
- while_expression statement_nsi
-;
-
-do_statement_begin:
- DO_TK
-;
-
-do_statement:
- do_statement_begin statement WHILE_TK OP_TK expression CP_TK SC_TK
- { ++complexity; }
-;
-
-for_statement:
- for_begin SC_TK expression SC_TK for_update CP_TK statement
-| for_begin SC_TK SC_TK for_update CP_TK statement
-;
-
-for_statement_nsi:
- for_begin SC_TK expression SC_TK for_update CP_TK statement_nsi
-| for_begin SC_TK SC_TK for_update CP_TK statement_nsi
-;
-
-for_header:
- FOR_TK OP_TK
-;
-
-for_begin:
- for_header for_init { ++complexity; }
-;
-for_init: /* Can be empty */
-| statement_expression_list
-| local_variable_declaration
-;
-
-for_update: /* Can be empty */
-| statement_expression_list
-;
-
-statement_expression_list:
- statement_expression
-| statement_expression_list C_TK statement_expression
-;
-
-break_statement:
- BREAK_TK SC_TK
-| BREAK_TK identifier SC_TK
-;
-
-/* `continue' with a label is considered for complexity but ordinary
- continue is not. */
-continue_statement:
- CONTINUE_TK SC_TK
- | CONTINUE_TK identifier SC_TK { ++complexity; }
-;
-
-return_statement:
- RETURN_TK SC_TK
-| RETURN_TK expression SC_TK
-;
-
-throw_statement:
- THROW_TK expression SC_TK { ++complexity; }
-;
-
-assert_statement:
- ASSERT_TK expression REL_CL_TK expression SC_TK
-| ASSERT_TK expression SC_TK
-| ASSERT_TK error
- {yyerror ("Missing term"); RECOVER;}
-| ASSERT_TK expression error
- {yyerror ("';' expected"); RECOVER;}
-;
-synchronized_statement:
- synchronized OP_TK expression CP_TK block
-| synchronized OP_TK expression CP_TK error
-;
-
-synchronized: /* Test lval.sub_token here */
- MODIFIER_TK
- { USE_ABSORBER; }
-;
-
-try_statement:
- TRY_TK block catches
-| TRY_TK block finally
-| TRY_TK block catches finally
-;
-
-catches:
- catch_clause
-| catches catch_clause
-;
-
-catch_clause:
- CATCH_TK OP_TK formal_parameter CP_TK block { ++complexity; }
-;
-
-finally:
- FINALLY_TK block { ++complexity; }
-;
-
-/* 19.12 Production from 15: Expressions */
-primary:
- primary_no_new_array
-| array_creation_expression
-;
-
-primary_no_new_array:
- literal
-| THIS_TK
-| OP_TK expression CP_TK
-| class_instance_creation_expression
-| field_access
-| method_invocation
-| array_access
-| type_literals
- /* Added, JDK1.1 inner classes. Documentation is wrong
- referring to a 'ClassName' (class_name) rule that doesn't
- exist. Used name instead. */
-| name DOT_TK THIS_TK
- { USE_ABSORBER; }
-;
-
-type_literals:
- name DOT_TK CLASS_TK
- { USE_ABSORBER; }
-| array_type DOT_TK CLASS_TK
- { USE_ABSORBER; }
-| primitive_type DOT_TK CLASS_TK
- { USE_ABSORBER; }
-| VOID_TK DOT_TK CLASS_TK
- { USE_ABSORBER; }
-;
-
-class_instance_creation_expression:
- NEW_TK class_type OP_TK argument_list CP_TK
-| NEW_TK class_type OP_TK CP_TK
-| anonymous_class_creation
-| something_dot_new identifier OP_TK CP_TK
-| something_dot_new identifier OP_TK CP_TK class_body
-| something_dot_new identifier OP_TK argument_list CP_TK
-| something_dot_new identifier OP_TK argument_list CP_TK class_body
-;
-
-anonymous_class_creation:
- NEW_TK class_type OP_TK CP_TK
- { report_class_declaration (anonymous_context); }
- class_body
-| NEW_TK class_type OP_TK argument_list CP_TK
- { report_class_declaration (anonymous_context); }
- class_body
-;
-
-something_dot_new: /* Added, not part of the specs. */
- name DOT_TK NEW_TK
- { USE_ABSORBER; }
-| primary DOT_TK NEW_TK
-;
-
-argument_list:
- expression
-| argument_list C_TK expression
-| argument_list C_TK error
-;
-
-array_creation_expression:
- NEW_TK primitive_type dim_exprs
-| NEW_TK class_or_interface_type dim_exprs
-| NEW_TK primitive_type dim_exprs dims
-| NEW_TK class_or_interface_type dim_exprs dims
- /* Added, JDK1.1 anonymous array. Initial documentation rule
- modified */
-| NEW_TK class_or_interface_type dims array_initializer
-| NEW_TK primitive_type dims array_initializer
-;
-
-dim_exprs:
- dim_expr
-| dim_exprs dim_expr
-;
-
-dim_expr:
- OSB_TK expression CSB_TK
-;
-
-dims:
- OSB_TK CSB_TK
- { bracket_count = 1; }
-| dims OSB_TK CSB_TK
- { bracket_count++; }
-;
-
-field_access:
- primary DOT_TK identifier
-| SUPER_TK DOT_TK identifier
-;
-
-/* We include method invocation in the complexity measure on the
- theory that most method calls are virtual and therefore involve a
- decision point. */
-method_invocation:
- name OP_TK CP_TK
- { USE_ABSORBER; ++complexity; }
-| name OP_TK argument_list CP_TK
- { USE_ABSORBER; ++complexity; }
-| primary DOT_TK identifier OP_TK CP_TK { ++complexity; }
-| primary DOT_TK identifier OP_TK argument_list CP_TK { ++complexity; }
-| SUPER_TK DOT_TK identifier OP_TK CP_TK { ++complexity; }
-| SUPER_TK DOT_TK identifier OP_TK argument_list CP_TK { ++complexity; }
-;
-
-array_access:
- name OSB_TK expression CSB_TK
- { USE_ABSORBER; }
-| primary_no_new_array OSB_TK expression CSB_TK
-;
-
-postfix_expression:
- primary
-| name
- { USE_ABSORBER; }
-| post_increment_expression
-| post_decrement_expression
-;
-
-post_increment_expression:
- postfix_expression INCR_TK
-;
-
-post_decrement_expression:
- postfix_expression DECR_TK
-;
-
-unary_expression:
- pre_increment_expression
-| pre_decrement_expression
-| PLUS_TK unary_expression
-| MINUS_TK unary_expression
-| unary_expression_not_plus_minus
-;
-
-pre_increment_expression:
- INCR_TK unary_expression
-;
-
-pre_decrement_expression:
- DECR_TK unary_expression
-;
-
-unary_expression_not_plus_minus:
- postfix_expression
-| NOT_TK unary_expression
-| NEG_TK unary_expression
-| cast_expression
-;
-
-cast_expression: /* Error handling here is potentially weak */
- OP_TK primitive_type dims CP_TK unary_expression
-| OP_TK primitive_type CP_TK unary_expression
-| OP_TK expression CP_TK unary_expression_not_plus_minus
-| OP_TK name dims CP_TK unary_expression_not_plus_minus
-;
-
-multiplicative_expression:
- unary_expression
-| multiplicative_expression MULT_TK unary_expression
-| multiplicative_expression DIV_TK unary_expression
-| multiplicative_expression REM_TK unary_expression
-;
-
-additive_expression:
- multiplicative_expression
-| additive_expression PLUS_TK multiplicative_expression
-| additive_expression MINUS_TK multiplicative_expression
-;
-
-shift_expression:
- additive_expression
-| shift_expression LS_TK additive_expression
-| shift_expression SRS_TK additive_expression
-| shift_expression ZRS_TK additive_expression
-;
-
-relational_expression:
- shift_expression
-| relational_expression LT_TK shift_expression
-| relational_expression GT_TK shift_expression
-| relational_expression LTE_TK shift_expression
-| relational_expression GTE_TK shift_expression
-| relational_expression INSTANCEOF_TK reference_type
-;
-
-equality_expression:
- relational_expression
-| equality_expression EQ_TK relational_expression
-| equality_expression NEQ_TK relational_expression
-;
-
-and_expression:
- equality_expression
-| and_expression AND_TK equality_expression
-;
-
-exclusive_or_expression:
- and_expression
-| exclusive_or_expression XOR_TK and_expression
-;
-
-inclusive_or_expression:
- exclusive_or_expression
-| inclusive_or_expression OR_TK exclusive_or_expression
-;
-
-conditional_and_expression:
- inclusive_or_expression
-| conditional_and_expression BOOL_AND_TK inclusive_or_expression
- { ++complexity; }
-;
-
-conditional_or_expression:
- conditional_and_expression
-| conditional_or_expression BOOL_OR_TK conditional_and_expression
- { ++complexity; }
-;
-
-conditional_expression: /* Error handling here is weak */
- conditional_or_expression
-| conditional_or_expression REL_QM_TK expression REL_CL_TK conditional_expression
- { ++complexity; }
-;
-
-assignment_expression:
- conditional_expression
-| assignment
-;
-
-assignment:
- left_hand_side assignment_operator assignment_expression
-;
-
-left_hand_side:
- name
- { USE_ABSORBER; }
-| field_access
-| array_access
-;
-
-assignment_operator:
- ASSIGN_ANY_TK
-| ASSIGN_TK
-;
-
-expression:
- assignment_expression
-;
-
-constant_expression:
- expression
-;
-
-%%
-
-/* Create a new parser context */
-
-void
-java_push_parser_context (void)
-{
- struct parser_ctxt *tmp = XCNEW (struct parser_ctxt);
-
- tmp->next = ctxp;
- ctxp = tmp;
-}
-
-static void
-push_class_context (const char *name)
-{
- struct class_context *ctx;
-
- ctx = XNEW (struct class_context);
- ctx->name = (char *) name;
- ctx->next = current_class_context;
- current_class_context = ctx;
-}
-
-static void
-pop_class_context (void)
-{
- struct class_context *ctx;
-
- if (current_class_context == NULL)
- return;
-
- ctx = current_class_context->next;
- if (current_class_context->name != anonymous_context)
- free (current_class_context->name);
- free (current_class_context);
-
- current_class_context = ctx;
- if (current_class_context == NULL)
- anonymous_count = 0;
-}
-
-/* Recursively construct the class name. This is just a helper
- function for get_class_name(). */
-static int
-make_class_name_recursive (struct obstack *stack, struct class_context *ctx)
-{
- if (! ctx)
- return 0;
-
- make_class_name_recursive (stack, ctx->next);
-
- /* Replace an anonymous context with the appropriate counter value. */
- if (ctx->name == anonymous_context)
- {
- char buf[50];
- ++anonymous_count;
- sprintf (buf, "%d", anonymous_count);
- ctx->name = xstrdup (buf);
- }
-
- obstack_grow (stack, ctx->name, strlen (ctx->name));
- obstack_1grow (stack, '$');
-
- return ISDIGIT (ctx->name[0]);
-}
-
-/* Return a newly allocated string holding the name of the class. */
-static char *
-get_class_name (void)
-{
- char *result;
- int last_was_digit;
- struct obstack name_stack;
-
- obstack_init (&name_stack);
-
- /* Duplicate the logic of parse.y:maybe_make_nested_class_name(). */
- last_was_digit = make_class_name_recursive (&name_stack,
- current_class_context->next);
-
- if (! last_was_digit
- && method_depth
- && current_class_context->name != anonymous_context)
- {
- char buf[50];
- ++anonymous_count;
- sprintf (buf, "%d", anonymous_count);
- obstack_grow (&name_stack, buf, strlen (buf));
- obstack_1grow (&name_stack, '$');
- }
-
- if (current_class_context->name == anonymous_context)
- {
- char buf[50];
- ++anonymous_count;
- sprintf (buf, "%d", anonymous_count);
- current_class_context->name = xstrdup (buf);
- obstack_grow0 (&name_stack, buf, strlen (buf));
- }
- else
- obstack_grow0 (&name_stack, current_class_context->name,
- strlen (current_class_context->name));
-
- result = xstrdup (obstack_finish (&name_stack));
- obstack_free (&name_stack, NULL);
-
- return result;
-}
-
-/* Actions defined here */
-
-static void
-report_class_declaration (const char * name)
-{
- extern int flag_dump_class, flag_list_filename;
-
- push_class_context (name);
- if (flag_dump_class)
- {
- char *name = get_class_name ();
-
- if (!previous_output)
- {
- if (flag_list_filename)
- fprintf (out, "%s: ", main_input_filename);
- previous_output = 1;
- }
-
- if (package_name)
- fprintf (out, "%s.%s ", package_name, name);
- else
- fprintf (out, "%s ", name);
-
- free (name);
- }
-}
-
-static void
-report_main_declaration (struct method_declarator *declarator)
-{
- extern int flag_find_main;
-
- if (flag_find_main
- && modifier_value == 2
- && !strcmp (declarator->method_name, "main")
- && declarator->args
- && declarator->args [0] == '['
- && (! strcmp (declarator->args+1, "String")
- || ! strcmp (declarator->args + 1, "java.lang.String"))
- && current_class_context)
- {
- if (!previous_output)
- {
- char *name = get_class_name ();
- if (package_name)
- fprintf (out, "%s.%s ", package_name, name);
- else
- fprintf (out, "%s", name);
- free (name);
- previous_output = 1;
- }
- }
-}
-
-void
-report (void)
-{
- extern int flag_complexity;
- if (flag_complexity)
- fprintf (out, "%s %d\n", main_input_filename, complexity);
-}
-
-/* Reset global status used by the report functions. */
-
-void
-reset_report (void)
-{
- previous_output = 0;
- package_name = NULL;
- current_class_context = NULL;
- complexity = 0;
-}
-
-void
-yyerror (const char *msg ATTRIBUTE_UNUSED)
-{
- fprintf (stderr, "%s: %s\n", main_input_filename, msg);
- exit (1);
-}
-
-#ifdef __XGETTEXT__
-/* Depending on the version of Bison used to compile this grammar,
- it may issue generic diagnostics spelled "syntax error" or
- "parse error". To prevent this from changing the translation
- template randomly, we list all the variants of this particular
- diagnostic here. Translators: there is no fine distinction
- between diagnostics with "syntax error" in them, and diagnostics
- with "parse error" in them. It's okay to give them both the same
- translation. */
-const char d1[] = N_("syntax error");
-const char d2[] = N_("parse error");
-const char d3[] = N_("syntax error; also virtual memory exhausted");
-const char d4[] = N_("parse error; also virtual memory exhausted");
-const char d5[] = N_("syntax error: cannot back up");
-const char d6[] = N_("parse error: cannot back up");
-#endif