a68g-parser.h

     
   1  //! @file a68g-parser.h
   2  //! @author J. Marcel van der Veer
   3  //!
   4  //! @section Copyright
   5  //!
   6  //! This file is part of Algol68G - an Algol 68 compiler-interpreter.
   7  //! Copyright 2001-2023 J. Marcel van der Veer [algol68g@xs4all.nl].
   8  //!
   9  //! @section License
  10  //!
  11  //! This program is free software; you can redistribute it and/or modify it 
  12  //! under the terms of the GNU General Public License as published by the 
  13  //! Free Software Foundation; either version 3 of the License, or 
  14  //! (at your option) any later version.
  15  //!
  16  //! This program is distributed in the hope that it will be useful, but 
  17  //! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
  18  //! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 
  19  //! more details. You should have received a copy of the GNU General Public 
  20  //! License along with this program. If not, see [http://www.gnu.org/licenses/].
  21  
  22  #if !defined (__A68G_PARSER_H__)
  23  #define __A68G_PARSER_H__
  24  
  25  #define STOP_CHAR 127
  26  
  27  extern BOOL_T dont_mark_here (NODE_T *);
  28  extern BOOL_T is_coercion (NODE_T *);
  29  extern BOOL_T is_firm (MOID_T *, MOID_T *);
  30  extern BOOL_T is_firm (MOID_T *, MOID_T *);
  31  extern BOOL_T is_formal_bounds (NODE_T *);
  32  extern BOOL_T is_loop_keyword (NODE_T *);
  33  extern BOOL_T is_modes_equivalent (MOID_T *, MOID_T *);
  34  extern BOOL_T is_new_lexical_level (NODE_T *);
  35  extern BOOL_T is_one_of (NODE_T * p, ...);
  36  extern BOOL_T is_ref_refety_flex (MOID_T *);
  37  extern BOOL_T is_semicolon_less (NODE_T *);
  38  extern BOOL_T is_subset (MOID_T *, MOID_T *, int);
  39  extern BOOL_T is_unitable (MOID_T *, MOID_T *, int);
  40  extern BOOL_T is_unit_terminator (NODE_T *);
  41  extern BOOL_T lexical_analyser (void);
  42  extern BOOL_T match_string (char *, char *, char);
  43  extern BOOL_T prove_moid_equivalence (MOID_T *, MOID_T *);
  44  extern BOOL_T whether (NODE_T * p, ...);
  45  extern char *phrase_to_text (NODE_T *, NODE_T **);
  46  extern GINFO_T *new_genie_info (void);
  47  extern int count_formal_bounds (NODE_T *);
  48  extern int count_operands (NODE_T *);
  49  extern int count_pack_members (PACK_T *);
  50  extern int first_tag_global (TABLE_T *, char *);
  51  extern int get_good_attribute (NODE_T *);
  52  extern int is_identifier_or_label_global (TABLE_T *, char *);
  53  extern KEYWORD_T *find_keyword_from_attribute (KEYWORD_T *, int);
  54  extern KEYWORD_T *find_keyword (KEYWORD_T *, char *);
  55  extern LINE_T *new_source_line (void);
  56  extern MOID_T *add_mode (MOID_T **, int, int, NODE_T *, MOID_T *, PACK_T *);
  57  extern MOID_T *depref_completely (MOID_T *);
  58  extern MOID_T *get_mode_from_declarer (NODE_T *);
  59  extern MOID_T *new_moid (void);
  60  extern MOID_T *register_extra_mode (MOID_T **, MOID_T *);
  61  extern MOID_T *unites_to (MOID_T *, MOID_T *);
  62  extern NODE_INFO_T *new_node_info (void);
  63  extern NODE_T *get_next_format_pattern (NODE_T *, A68_REF, BOOL_T);
  64  extern NODE_T *new_node (void);
  65  extern NODE_T *reduce_dyadic (NODE_T *, int u);
  66  extern NODE_T *some_node (char *);
  67  extern NODE_T *top_down_loop (NODE_T *);
  68  extern NODE_T *top_down_skip_unit (NODE_T *);
  69  extern PACK_T *absorb_union_pack (PACK_T *);
  70  extern PACK_T *new_pack (void);
  71  extern TABLE_T *find_level (NODE_T *, int);
  72  extern TABLE_T *new_symbol_table (TABLE_T *);
  73  extern TAG_T *add_tag (TABLE_T *, int, NODE_T *, MOID_T *, int);
  74  extern TAG_T *find_tag_global (TABLE_T *, int, char *);
  75  extern TAG_T *find_tag_local (TABLE_T *, int, char *);
  76  extern TAG_T *new_tag (void);
  77  extern TOKEN_T *add_token (TOKEN_T **, char *);
  78  extern void a68_parser (void);
  79  extern void add_mode_to_pack_end (PACK_T **, MOID_T *, char *, NODE_T *);
  80  extern void add_mode_to_pack (PACK_T **, MOID_T *, char *, NODE_T *);
  81  extern void append_source_line (char *, LINE_T **, int *, char *);
  82  extern void assign_offsets (NODE_T *);
  83  extern void assign_offsets_packs (MOID_T *);
  84  extern void assign_offsets_table (TABLE_T *);
  85  extern void bind_format_tags_to_tree (NODE_T *);
  86  extern void bind_routine_tags_to_tree (NODE_T *);
  87  extern void bottom_up_error_check (NODE_T *);
  88  extern void bottom_up_parser (NODE_T *);
  89  extern void check_parenthesis (NODE_T *);
  90  extern void coercion_inserter (NODE_T *);
  91  extern void coercion_inserter (NODE_T *);
  92  extern void collect_taxes (NODE_T *);
  93  extern void contract_union (MOID_T *);
  94  extern void count_pictures (NODE_T *, int *);
  95  extern void elaborate_bold_tags (NODE_T *);
  96  extern void extract_declarations (NODE_T *);
  97  extern void extract_declarations (NODE_T *);
  98  extern void extract_identities (NODE_T *);
  99  extern void extract_indicants (NODE_T *);
 100  extern void extract_labels (NODE_T *, int);
 101  extern void extract_operators (NODE_T *);
 102  extern void extract_priorities (NODE_T *);
 103  extern void extract_proc_identities (NODE_T *);
 104  extern void extract_proc_variables (NODE_T *);
 105  extern void extract_variables (NODE_T *);
 106  extern void fill_symbol_table_outer (NODE_T *, TABLE_T *);
 107  extern void finalise_symbol_table_setup (NODE_T *, int);
 108  extern void free_genie_heap (NODE_T *);
 109  extern void get_max_simplout_size (NODE_T *);
 110  extern void get_refinements (void);
 111  extern void ignore_superfluous_semicolons (NODE_T *);
 112  extern void init_before_tokeniser (void);
 113  extern void init_parser (void);
 114  extern void jumps_from_procs (NODE_T * p);
 115  extern void make_moid_list (MODULE_T *);
 116  extern void make_special_mode (MOID_T **, int);
 117  extern void make_standard_environ (void);
 118  extern void make_sub (NODE_T *, NODE_T *, int);
 119  extern void mark_auxilliary (NODE_T *);
 120  extern void mark_jump_in_par (NODE_T *, BOOL_T);
 121  extern void mark_moids (NODE_T *);
 122  extern void mode_checker (NODE_T *);
 123  extern void mode_checker (NODE_T *);
 124  extern void portcheck (NODE_T *);
 125  extern void preliminary_symbol_table_setup (NODE_T *);
 126  extern void prune_echoes (OPTION_LIST_T *);
 127  extern void put_refinements (void);
 128  extern void rearrange_goto_less_jumps (NODE_T *);
 129  extern void recover_from_error (NODE_T *, int, BOOL_T);
 130  extern void reduce_arguments (NODE_T *);
 131  extern void reduce_basic_declarations (NODE_T *);
 132  extern void reduce_bounds (NODE_T *);
 133  extern void reduce_branch (NODE_T *, int);
 134  extern void reduce_collateral_clauses (NODE_T *);
 135  extern void reduce_declaration_lists (NODE_T *);
 136  extern void reduce_declarers (NODE_T *, int);
 137  extern void reduce_enclosed_clauses (NODE_T *, int);
 138  extern void reduce_enquiry_clauses (NODE_T *);
 139  extern void reduce_erroneous_units (NODE_T *);
 140  extern void reduce_format_texts (NODE_T *);
 141  extern void reduce_formulae (NODE_T *);
 142  extern void reduce_generic_arguments (NODE_T *);
 143  extern void reduce (NODE_T *, void (*)(NODE_T *), BOOL_T *, ...);
 144  extern void reduce_primaries (NODE_T *, int);
 145  extern void reduce_primary_parts (NODE_T *, int);
 146  extern void reduce_right_to_left_constructs (NODE_T * q);
 147  extern void reduce_secondaries (NODE_T *);
 148  extern void reduce_serial_clauses (NODE_T *);
 149  extern void reduce_tertiaries (NODE_T *);
 150  extern void reduce_units (NODE_T *);
 151  extern void register_nodes (NODE_T *);
 152  extern void renumber_moids (MOID_T *, int);
 153  extern void renumber_nodes (NODE_T *, int *);
 154  extern void reset_symbol_table_nest_count (NODE_T *);
 155  extern void scope_checker (NODE_T *);
 156  extern void scope_checker (NODE_T *);
 157  extern void set_moid_sizes (MOID_T *);
 158  extern void set_nest (NODE_T *, NODE_T *);
 159  extern void set_proc_level (NODE_T *, int);
 160  extern void set_up_tables (void);
 161  extern void substitute_brackets (NODE_T *);
 162  extern void tie_label_to_serial (NODE_T *);
 163  extern void tie_label_to_unit (NODE_T *);
 164  extern void top_down_parser (NODE_T *);
 165  extern void verbosity (void);
 166  extern void victal_checker (NODE_T *);
 167  extern void warn_for_unused_tags (NODE_T *);
 168  extern void widen_denotation (NODE_T *);
 169  
 170  #endif