Mercurial > ~dholland > hg > ag > index.cgi
diff anagram/agcore/data.h @ 0:13d2b8934445
Import AnaGram (near-)release tree into Mercurial.
author | David A. Holland |
---|---|
date | Sat, 22 Dec 2007 17:52:45 -0500 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/anagram/agcore/data.h Sat Dec 22 17:52:45 2007 -0500 @@ -0,0 +1,176 @@ +/* + * AnaGram, A System for Syntax Directed Programming + * Copyright 1993 Parsifal Software. All Rights Reserved. + * See the file COPYING for license and usage terms. + * + * data.h + */ + +#ifndef DATA_H +#define DATA_H + +#include <stdio.h> +#include "port.h" + +struct list_dict; // from dict.h +struct tuple_dict; // from dict.h +struct tsd; // from tsd.h +#include "agstack.h" + + +enum syntax_states { + syntax_reset, + syntax_loaded, + syntax_error, + syntax_parsed, + syntax_analyzed, + engine_built +}; + +struct conflict_type { + tsd *ct; + int *pv; + int ns; +}; + +class Problem { +public: + char *msg; + Problem(char *m) : msg(m) {} + Problem(const Problem &problem) : msg(problem.msg) {} +}; + + +template <class T> +struct Triple { + T x, y, z; +public: + Triple() : x(0), y(0), z(0) {} + Triple(const T x_, const T y_, const T z_) : x(x_), y(y_), z(z_) {} + Triple<T> &values(T &rx, T &ry, T&rz) { rx=x, ry=y, rz=z; return *this; } + int operator < (const Triple<T> &t) const; +}; + +template <class T> +int Triple<T>::operator < (const Triple<T> &t) const { + if (x < t.x) return 1; + if (t.x < x) return 0; + if (y < t.y) return 1; + if (t.y < y) return 0; + return z < t.z; +} + + +template <class T> +struct OrderedPair { + T x, y; +public: + OrderedPair() : x(0), y(0) {} + OrderedPair(const T x_, const T y_) : x(x_), y(y_) {} + OrderedPair<T> &values(T &rx, T &ry) { rx=x, ry=y; return *this; } + int operator < (const OrderedPair<T> &t) const; +}; + +template <class T> +int OrderedPair<T>::operator < (const OrderedPair<T> &t) const { + if (x < t.x) return 1; + if (t.x < x) return 0; + return y < t.y; +} + +//////////////////////////////////////////////////////////// + +extern tuple_dict *frss_dict; + +extern tsd *unres_con; +extern tsd *res_con; +extern int precedence_level; +extern int enum_base; + +extern tsd *prr; +extern tsd *key_mess; +extern tsd *rename_macro_list; + +extern int void_token_type; +extern int int_token_type; +extern int long_token_type; +extern unsigned nprods; + +extern syntax_states syntax_state; + +extern const char *syntaxStateString[]; + +struct char_set_map { + unsigned part_index; + int nparts; + int parse_tree; +}; + +extern char_set_map *map_char_set; +extern unsigned *part_list; +extern unsigned *chars_list; + +extern list_dict *char_set_dict; +extern list_dict *key_list_dict; +extern list_dict *part_dict; +extern list_dict *prod_dict; +extern list_dict *vp_prod_dict; + +struct vp_prod_number_map { + int token_number; +}; + +extern vp_prod_number_map *map_vp_prod_number; + +extern unsigned *previous_states_list; +extern unsigned *completed_forms_list; +extern unsigned *gotos_list; +extern unsigned *reductions_list; +extern unsigned *a_actions_list; +extern unsigned *t_actions_list; +extern unsigned *p_actions_list; +extern unsigned *completions_list; +extern unsigned *chain_completions_list; +extern unsigned *chain_gotos_list; +extern unsigned *reduction_states_list; +extern unsigned nstates; + +struct part_number_map { + unsigned chars_index; + int size; + unsigned token_number; +}; + +extern part_number_map *map_part_number; + +struct char_number_map { + unsigned token_number; + unsigned part_number; + unsigned token_name; +}; + +extern char_number_map *map_char_number; +extern int max_char_number; +extern int min_char_number; +extern unsigned n_chars; + +/* flags */ + +extern FILE *h_file; +extern FILE *pe_file; + +extern char *key_ends; +extern tsd *key_table; +extern unsigned n_key_ends; +extern int max_key_length; + +extern int character_seen; + +extern AgStack<int> distinguishSets; + +void init_data(void); +void reset_summary_data(void); +void reset_result_data(void); + + +#endif /* DATA_H */