globals.h
上传用户:wqdrylgs
上传日期:2007-02-09
资源大小:65k
文件大小:3k
源码类别:

汇编语言

开发平台:

WINDOWS

  1. /****************************************************/
  2. /* File: globals.h                                  */
  3. /* Global types and vars for C_Minus compiler       */
  4. /* must come before other include files             */
  5. /****************************************************/
  6. #ifndef _GLOBALS_H_
  7. #define _GLOBALS_H_
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <ctype.h>
  11. #include <string.h>
  12. #ifndef FALSE
  13. #define FALSE 0
  14. #endif
  15. #ifndef TRUE
  16. #define TRUE 1
  17. #endif
  18. #define sizeofint 2
  19. #define sizeofchar 2
  20. #define sizeoffloat sizeof(float)
  21. /* MAXRESERVED = the number of reserved words */
  22. #define MAXRESERVED 10
  23. #define VARIABLE_LENGTH 2
  24. #define EXP_VARIABLE_LENGTH 1
  25. #define LABEL_SIZE 10
  26. typedef int TokenType;
  27. extern FILE* source; /* source code text file */
  28. extern FILE* listing; /* listing output text file */
  29. extern FILE* inter_code; /* code text file for TM simulator */
  30. extern int lineno; /* source line number for listing */
  31. /**************************************************/
  32. /***********   Syntax tree for parsing ************/
  33. /**************************************************/
  34. typedef enum {Dec,Stmt,Exp} NodeKind;
  35. typedef enum {IfK,WhileK,CallK,ReturnK,BreakK,ContinueK,AssignK} StmtKind;
  36. typedef enum {OpK,NumK,FnumK,CharK,IdK,NotK} ExpKind;
  37. typedef enum {FunDecK,FunDefK,VarK,CompK,ParamK} DecKind;
  38. /* Type is used for type checking */
  39. typedef enum {Void,Integer,Float,Boolean,Char} Type;
  40. /* the size of the symble table */
  41. #define SIZE 13
  42. /* the record in the variable table for 
  43.    each variable */
  44. typedef struct valEntry {
  45. char * name;
  46. Type type;
  47. int offset; //used for activation record
  48. struct valEntry * next;
  49. } ValEntry;
  50. /* the record in the function table for 
  51.    each function */
  52. typedef struct funEntry {
  53. char * name;
  54. Type type;
  55. int ret_val;
  56. ValEntry * para; //parameters of the function
  57. struct funEntry * next;
  58. } FunEntry;
  59. /* the symble table structure for variables */
  60. typedef struct symtab {
  61. struct symtab * parent;
  62. int nestlevel;
  63. int memloc; //memory location for variables in the symble table
  64. ValEntry * valTable[SIZE];
  65. FunEntry * funEntry;
  66. char lab1[LABEL_SIZE];
  67. char lab2[LABEL_SIZE];
  68. } Symtab;
  69. #define MAXCHILDREN 3
  70. typedef struct treeNode
  71.    { struct treeNode * child[MAXCHILDREN];
  72.      struct treeNode * sibling;
  73.      int lineno;
  74.      NodeKind nodekind;
  75.  union { StmtKind stmt; ExpKind exp; DecKind dec;} kind;
  76.      union { TokenType op;
  77.              union
  78. {int i;
  79.  float f;
  80. } val;
  81.              char * name; 
  82.  Symtab * table;
  83.            } attr;
  84.  int call_stmt;
  85.      Type type; 
  86.    } TreeNode;
  87. /**************************************************/
  88. /***********   Flags for tracing       ************/
  89. /**************************************************/
  90. /* TraceScan = TRUE causes token information to be
  91.  * printed to the listing file as each token is
  92.  * recognized by the scanner
  93.  */
  94. extern int TraceScan;
  95. /* TraceParse = TRUE causes the syntax tree to be
  96.  * printed to the listing file in linearized form
  97.  * (using indents for children)
  98.  */
  99. extern int TraceParse;
  100. /* TraceAnalyze = TRUE causes symbol table inserts
  101.  * and lookups to be reported to the listing file
  102.  */
  103. extern int TraceAnalyze;
  104. /* Error = TRUE prevents further passes if an error occurs */
  105. extern int Error; 
  106. #endif