globals.h

来自「c语言编写」· C头文件 代码 · 共 119 行

H
119
字号

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>

#ifndef FALSE
#define FALSE 0
#endif

#ifndef TRUE
#define TRUE 1
#endif

#define MAXRESERVED 6

typedef enum
{
	ENDFILE,ERROR,
	IF,ELSE,INT,RETURN,VOID,WHILE,
	ID,NUM,
	//0-9
	ASSIGN,EQ,NEQ,LT,LTOREQ,BI,//10-15
	BIOREQ,PLUS,MINUS,TIMES,OVER,SEMI,COMA,//16-22
	LROUNDBRA,RROUNDBRA,LSQUARPAREN,//23-25
	RSQUARPAREN,LBRAC,RBRAC,LCOM,RCOM//26-29
}TokenType;
#define NUM_TERM RCOM+1//终结符数量

extern FILE* source;
extern FILE* listing;
extern FILE* code;
extern int lineno;


/*for parsing*/
#define MAXTOKENLEN 40
extern char tokenString[MAXTOKENLEN+1];
//
#define  OFFSET					50
#define  NonOp					-1 
#define  NullToken				-1   
#define  V_shop					0//等于ENDFILE
#define  program				1+OFFSET//因为前面的关键字等符号已经占据了0到几十的空间
#define  declaration_list		2+OFFSET
#define  declaration			3+OFFSET
#define  var_declaration		4+OFFSET
#define  type_specifier			5+OFFSET
#define  fun_declaration		6+OFFSET
#define  params			    	7+OFFSET
#define  param_list				8+OFFSET
#define  param					9+OFFSET
#define  compound_stmt			10+OFFSET
#define  local_declarations		11+OFFSET
#define  statement_list			12+OFFSET///
#define  statement				13+OFFSET
#define  expression_stmt		14+OFFSET
#define  selection_stmt			15+OFFSET
#define  iteration_stmt			16+OFFSET
#define  return_stmt			17+OFFSET
#define  expression				18+OFFSET
#define  var					19+OFFSET
#define  simple_expression		20+OFFSET
#define  relop					21+OFFSET
#define  additive_expression	22+OFFSET
#define  addop					23+OFFSET
#define  term					24+OFFSET
#define  mulop					25+OFFSET
#define  factor					26+OFFSET
#define  call					27+OFFSET
#define  args					28+OFFSET
#define  args_list				29+OFFSET
/*for left factoring*/
#define  _declaration			30+OFFSET
#define  _param					31+OFFSET
#define  _selection_stmt		32+OFFSET
#define  _return_stmt			33+OFFSET
#define  _var					34+OFFSET
#define  _simple_expression		35+OFFSET
/*for left recursion removal*/
#define  _declaration_list		36+OFFSET
#define  _param_list			37+OFFSET
#define  _local_declarations	38+OFFSET
#define  _statement_list		39+OFFSET
#define  _additive_expression	40+OFFSET
#define  _term					41+OFFSET
#define  _args_list				42+OFFSET
#define  _val					43+OFFSET
#define  _op_but_assign			44+OFFSET
#define  _expression_ID  		45+OFFSET
#define  _expression_var		46+OFFSET
#define  _expression_call		47+OFFSET
#define  NUM_NTERM _expression_call - OFFSET	//non-term的数量

typedef enum{Stmtk,Expk} NodeKind;
typedef enum{Ifx,Repeatk,AssignK,Readk,Writek} StmtKind;
typedef enum{Opk,Constk,Idk} ExpKind;

typedef enum{Void,Integer,Boolean} ExpType;

#define MAXCHILDREN 3
	
typedef struct treeNode
{
	struct treeNode* child;
	struct treeNode* sibling;
	int  Type;
	union {StmtKind stmt;ExpKind exp;} kind;
	union {TokenType op;
			int val;
			char* name;} attr;
}TreeNode;

extern int TraceScan;
extern int TraceParse;
extern int TraceAnalyze;
extern int TraceCode;

⌨️ 快捷键说明

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