121 lines
3.1 KiB
C
121 lines
3.1 KiB
C
/****************************************************/
|
|
/* 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 3
|
|
|
|
typedef 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
|