dlg.h
上传用户:itx_2006
上传日期:2007-01-06
资源大小:493k
文件大小:9k
源码类别:

编译器/解释器

开发平台:

Others

  1. /* dlg header file
  2.  *
  3.  * SOFTWARE RIGHTS
  4.  *
  5.  * We reserve no LEGAL rights to the Purdue Compiler Construction Tool
  6.  * Set (PCCTS) -- PCCTS is in the public domain.  An individual or
  7.  * company may do whatever they wish with source code distributed with
  8.  * PCCTS or the code generated by PCCTS, including the incorporation of
  9.  * PCCTS, or its output, into commerical software.
  10.  *
  11.  * We encourage users to develop software with PCCTS.  However, we do ask
  12.  * that credit is given to us for developing PCCTS.  By "credit",
  13.  * we mean that if you incorporate our source code into one of your
  14.  * programs (commercial product, research project, or otherwise) that you
  15.  * acknowledge this fact somewhere in the documentation, research report,
  16.  * etc...  If you like PCCTS and have developed a nice tool with the
  17.  * output, please mention that you developed it using PCCTS.  In
  18.  * addition, we ask that this header remain intact in our source code.
  19.  * As long as these guidelines are kept, we expect to continue enhancing
  20.  * this system and expect to make other tools available as they are
  21.  * completed.
  22.  *
  23.  * DLG 1.33
  24.  * Will Cohen
  25.  * With mods by Terence Parr; AHPCRC, University of Minnesota
  26.  * 1989-1998
  27.  */
  28. #include "set.h"
  29. /* MR1 Move pcctscfg.h to top of file  */
  30. #include "pcctscfg.h"
  31. #define TRUE 1
  32. #define FALSE 0
  33. /***** output related stuff *******************/
  34. #define IN input_stream
  35. #define OUT output_stream
  36. #define MAX_MODES 50 /* number of %%names allowed */
  37. #define MAX_ON_LINE 10
  38. #define NFA_MIN 64 /* minimum nfa_array size */
  39. #define DFA_MIN 64 /* minimum dfa_array size */
  40. #define DEFAULT_CLASSNAME "DLGLexer"
  41. /* these macros allow the size of the character set to be easily changed */
  42. /* NOTE: do NOT change MIN_CHAR since EOF is the lowest char, -1 */
  43. #define MIN_CHAR (-1) /* lowest possible character possible on input */
  44. #define MAX_CHAR 255 /* highest possible character possible on input */
  45. #define CHAR_RANGE (1+(MAX_CHAR) - (MIN_CHAR))
  46. /* indicates that the not an "array" reference */
  47. #define NIL_INDEX 0
  48. /* size of hash table used to find dfa_states quickly */
  49. #define HASH_SIZE 211
  50. #define nfa_node struct _nfa_node
  51. nfa_node {
  52. int node_no;
  53. int nfa_set;
  54. int accept; /* what case to use */
  55. nfa_node *trans[2];
  56. set label; /* one arc always labelled with epsilon */
  57. };
  58. #define dfa_node struct _dfa_node
  59. dfa_node {
  60. int node_no;
  61. int dfa_set;
  62. int alternatives; /* used for interactive mode */
  63. /* are more characters needed */
  64. int done;
  65. set nfa_states;
  66. int trans[1];/* size of transition table depends on
  67.   * number of classes required for automata.
  68.   */
  69. };
  70. /******** macros for accessing the NFA and DFA nodes ****/
  71. #define NFA(x) (nfa_array[x])
  72. #define DFA(x) (dfa_array[x])
  73. #define DFA_NO(x) ( (x) ? (x)->node_no : NIL_INDEX)
  74. #define NFA_NO(x) ( (x) ? (x)->node_no : NIL_INDEX)
  75. /******** wrapper for memory checking ***/
  76. /*#define malloc(x) dlg_malloc((x),__FILE__,__LINE__)*/
  77. /*#define calloc(x,y) dlg_calloc((x),(y),__FILE__,__LINE__)*/
  78. /******** antlr attributes *************/
  79. typedef struct {
  80. unsigned char letter;
  81. nfa_node *l,*r;
  82. set label;
  83. } Attrib;
  84. #define zzcr_attr(attr, token, text) {
  85. (attr)->letter = text[0]; (attr)->l = NULL;
  86. (attr)->r = NULL; (attr)->label = empty;
  87. }
  88. #define zzd_attr(a) set_free((a)->label);
  89. /******************** Variable ******************************/
  90. extern char program[]; /* tells what program this is */
  91. extern char version[]; /* tells what version this is */
  92. extern char *file_str[]; /* file names being used */
  93. extern int err_found; /* flag to indicate error occured */
  94. extern int action_no; /* last action function printed */
  95. extern int func_action; /* should actions be turned into functions?*/
  96. extern set used_chars; /* used to label trans. arcs */
  97. extern set used_classes; /* classes or chars used to label trans. arcs */
  98. extern int class_no; /* number of classes used */
  99. extern set class_sets[]; /* shows char. in each class */
  100. extern set normal_chars; /* mask off unused portion of set */
  101. extern int comp_level; /* what compression level to use */
  102. extern int interactive; /* interactive scanner (avoid lookahead)*/
  103. extern int mode_counter; /* keeps track of the number of %%name */
  104. extern int dfa_basep[]; /* start of each group of dfa */
  105. extern int dfa_class_nop[];/* number of transistion arcs in */
  106. /* each dfa in each mode */
  107. extern int nfa_allocated;
  108. extern int dfa_allocated;
  109. extern nfa_node **nfa_array; /* start of nfa "array" */
  110. extern dfa_node **dfa_array; /* start of dfa "array" */
  111. extern int operation_no; /* unique number for each operation */
  112. extern FILE *input_stream; /* where description read from */
  113. extern FILE *output_stream; /* where to put the output */
  114. extern FILE *mode_stream; /* where to put the mode output */
  115. extern FILE *class_stream;
  116. extern char *mode_file; /* name of file for mode output */
  117. extern int gen_ansi; /* produce ansi compatible code */
  118. extern int case_insensitive;/* ignore case of input spec. */
  119. extern int warn_ambig; /* show if regular expressions ambiguous */
  120. extern int gen_cpp;
  121. extern char *cl_file_str;
  122. extern int firstLexMember; /* MR1 */
  123. extern char *OutputDirectory;
  124. /******************** Functions ******************************/
  125. #ifdef __USE_PROTOS
  126. extern char  *dlg_malloc(int, char *, int); /* wrapper malloc */
  127. extern char  *dlg_calloc(int, int, char *, int); /* wrapper calloc */
  128. extern int reach(unsigned *, register int, unsigned *);
  129. extern set closure(set *, unsigned *);
  130. extern dfa_node *new_dfa_node(set);
  131. extern nfa_node *new_nfa_node(void);
  132. extern dfa_node *dfastate(set);
  133. extern dfa_node **nfa_to_dfa(nfa_node *);
  134. extern void internal_error(char *, char *, int);    /* MR9 23-Sep-97 */
  135. extern FILE *read_stream(char *); /* opens file for reading */
  136. extern FILE *write_stream(char *); /* opens file for writing */
  137. extern void make_nfa_model_node(void);
  138. extern void make_dfa_model_node(int);
  139. extern char *ClassName(char *);
  140. extern char *OutMetaName(char *);
  141. extern void error(char*, int);
  142. extern void warning(char*, int);
  143. extern void p_head();
  144. extern void p_class_hdr();
  145. extern void p_includes();
  146. extern void p_tables();
  147. extern void p_tail(); /* MR1 */
  148. extern void p_class_def1(); /* MR1 */
  149. extern void new_automaton_mode(); /* MR1 */
  150. extern int  relabel(nfa_node *,int); /* MR1 */
  151. extern void p_shift_table(int); /* MR1 */
  152. extern void p_bshift_table(); /* MR1 */
  153. extern void p_class_table(); /* MR1 */
  154. extern void p_mode_def(char *,int); /* MR1 */
  155. extern void init(); /* MR1 */
  156. extern void p_class_def2(); /* MR1 */
  157. extern void clear_hash(); /* MR1 */
  158. extern void p_alternative_table(); /* MR1 */
  159. extern void p_node_table(); /* MR1 */
  160. extern void p_dfa_table(); /* MR1 */
  161. extern void p_accept_table(); /* MR1 */
  162. extern void p_action_table(); /* MR1 */
  163. extern void p_base_table(); /* MR1 */
  164. extern void p_single_node(int,int); /* MR1 */
  165. extern char * minsize(int); /* MR1 */
  166. extern void close1(nfa_node *,int,set *); /* MR1 */
  167. extern void partition(nfa_node *,int); /* MR1 */
  168. extern void intersect_nfa_labels(nfa_node *,set *); /* MR1 */
  169. extern void r_intersect(nfa_node *,set *); /* MR1 */
  170. extern void label_node(nfa_node *); /* MR1 */
  171. extern void label_with_classes(nfa_node *); /* MR1 */
  172. #else
  173. extern char *dlg_malloc(); /* wrapper malloc */
  174. extern char *dlg_calloc(); /* wrapper calloc */
  175. extern int reach();
  176. extern set closure();
  177. extern dfa_node *new_dfa_node();
  178. extern nfa_node *new_nfa_node();
  179. extern dfa_node *dfastate();
  180. extern dfa_node **nfa_to_dfa();
  181. extern void internal_error();   /* MR9 23-Sep-97 */
  182. extern FILE *read_stream(); /* opens file for reading */
  183. extern FILE *write_stream(); /* opens file for writing */
  184. extern void make_nfa_model_node();
  185. extern void make_dfa_model_node();
  186. extern char *ClassName();
  187. extern char *OutMetaName();
  188. extern void error();
  189. extern void warning();
  190. extern void p_head();                   /* MR9 */
  191. extern void p_class_hdr();              /* MR9 */
  192. extern void p_includes();               /* MR9 */
  193. extern void p_tables();                 /* MR9 */
  194. extern void p_tail(); /* MR1 */
  195. extern void p_class_def1(); /* MR1 */
  196. extern void new_automaton_mode(); /* MR1 */
  197. extern int  relabel(); /* MR1 */
  198. extern void p_shift_table(); /* MR1 */
  199. extern void p_bshift_table(); /* MR1 */
  200. extern void p_class_table(); /* MR1 */
  201. extern void p_mode_def(); /* MR1 */
  202. extern void init(); /* MR1 */
  203. extern void p_class_def2(); /* MR1 */
  204. extern void clear_hash(); /* MR1 */
  205. extern void p_alternative_table(); /* MR1 */
  206. extern void p_node_table(); /* MR1 */
  207. extern void p_dfa_table(); /* MR1 */
  208. extern void p_accept_table(); /* MR1 */
  209. extern void p_action_table(); /* MR1 */
  210. extern void p_base_table(); /* MR1 */
  211. extern void p_single_node(); /* MR1 */
  212. extern char * minsize(); /* MR1 */
  213. extern void close1(); /* MR1 */
  214. extern void partition(); /* MR1 */
  215. extern void intersect_nfa_labels(); /* MR1 */
  216. extern void r_intersect(); /* MR1 */
  217. extern void label_node(); /* MR1 */
  218. extern void label_with_classes(); /* MR1 */
  219. #endif