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