⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 semantic.h

📁 现代编译原理C语言实现中的第二章的编译器实现。并在书中的基础上有所改变。包括词法语法分析及汇编代码生成。
💻 H
字号:
#pragma once
#include "common.h"


class Semantic
{
public:
	Semantic(void);
	~Semantic(void);
};

typedef  char  cstr[ WORD_LEN ];

enum  OperateType { PLUS, MINUS, MUL, DIV };

typedef  struct  operate {
	OperateType  operType;
} op_rec;

enum  ExprType  { IDEXPR,  LITERALEXPR,  TEMPEXPR, CALLEXPR };

typedef  struct  expr_strc {
	enum  ExprType  kind;
	union {
		cstr name;  // for  IDEXPR,  TEMPEXPR,  CALLEXPR
		int val;    // for  LITERALEXPR
	};
} expr_rec;
/*
typedef  struct  func_strc {
	cstr name;
	int  param_count;
} func_rec; */

enum  Level { GLOBAL, LOCAL };

//---------------------------------------------------------
char * get_temp(void);
void   check_id(cstr );
void   check_intliteral(int );
void   check_func_def(cstr);

void		start(void);
void		finish(void);
void		assign(expr_rec target, expr_rec source);

op_rec		process_op(void);
expr_rec	process_id(void);
expr_rec	process_literal(void);
void		gen_func_name(expr_rec & fdef); // new added
void		process_func_call(void); // new added
void        process_param(); // new added
void		process_argu(); // new added

expr_rec	gen_infix(expr_rec & e1, op_rec & op, expr_rec & e2);

void		read_id(expr_rec & in_var);
void		write_expr(expr_rec & out_expr);


void		generate(char * op, char * A, char * B, char * C);

void		semantic_error(char *);

⌨️ 快捷键说明

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