globals.h

来自「一个简化的编译器」· C头文件 代码 · 共 121 行

H
121
字号
/****************************************************//* File: globals.h                                  *//* Yacc/Bison Version                               *//* Global types and vars for TINY compiler          *//* must come before other include files             *//* Compiler Construction: Principles and Practice   *//* Kenneth C. Louden                                *//****************************************************/#ifndef _GLOBALS_H_#define _GLOBALS_H_#include <stdio.h>#include <stdlib.h>#include <ctype.h>#include <string.h>/* Yacc/Bison generates internally its own values * for the tokens. Other files can access these values * by including the tab.h file generated using the * Yacc/Bison option -d ("generate header") * * The YYPARSER flag prevents inclusion of the tab.h * into the Yacc/Bison output itself */#ifndef YYPARSER/* the name of the following file may change */#include "y.tab.h"/* ENDFILE is implicitly defined by Yacc/Bison, * and not included in the tab.h file */#define ENDFILE 0#endif#ifndef FALSE#define FALSE 0#endif#ifndef TRUE#define TRUE 1#endif/* MAXRESERVED = the number of reserved words */#define MAXRESERVED 8/* Yacc/Bison generates its own integer values * for tokens */typedef int TokenType; extern FILE* source; /* source code text file */extern FILE* listing; /* listing output text file */extern FILE* code; /* code text file for TM simulator */extern int lineno; /* source line number for listing *//**************************************************//***********   Syntax tree for parsing ************//**************************************************/typedef enum {StmtK,ExpK} NodeKind;typedef enum {IfK,RepeatK,AssignK,ReadK,WriteK} StmtKind;typedef enum {OpK,ConstK,IdK} ExpKind;/* ExpType is used for type checking */typedef enum {Void,Integer,Boolean} ExpType;#define MAXCHILDREN 3typedef struct treeNode   { struct treeNode * child[MAXCHILDREN];     struct treeNode * sibling;     int lineno;     NodeKind nodekind;     union { StmtKind stmt; ExpKind exp;} kind;     union { TokenType op;             int val;             char * name; } attr;     ExpType type; /* for type checking of exps */   } TreeNode;/**************************************************//***********   Flags for tracing       ************//**************************************************//* EchoSource = TRUE causes the source program to * be echoed to the listing file with line numbers * during parsing */extern int EchoSource;/* TraceScan = TRUE causes token information to be * printed to the listing file as each token is * recognized by the scanner */extern int TraceScan;/* TraceParse = TRUE causes the syntax tree to be * printed to the listing file in linearized form * (using indents for children) */extern int TraceParse;/* TraceAnalyze = TRUE causes symbol table inserts * and lookups to be reported to the listing file */extern int TraceAnalyze;/* TraceCode = TRUE causes comments to be written * to the TM code file as code is generated */extern int TraceCode;/* Error = TRUE prevents further passes if an error occurs */extern int Error; #endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?