SNL语言-吉大计算机编译原理课程设计文档格式.doc

上传人:聆听****声音 文档编号:139686 上传时间:2023-04-28 格式:DOC 页数:44 大小:217.04KB
下载 相关 举报
SNL语言-吉大计算机编译原理课程设计文档格式.doc_第1页
第1页 / 共44页
SNL语言-吉大计算机编译原理课程设计文档格式.doc_第2页
第2页 / 共44页
SNL语言-吉大计算机编译原理课程设计文档格式.doc_第3页
第3页 / 共44页
SNL语言-吉大计算机编译原理课程设计文档格式.doc_第4页
第4页 / 共44页
SNL语言-吉大计算机编译原理课程设计文档格式.doc_第5页
第5页 / 共44页
SNL语言-吉大计算机编译原理课程设计文档格式.doc_第6页
第6页 / 共44页
SNL语言-吉大计算机编译原理课程设计文档格式.doc_第7页
第7页 / 共44页
SNL语言-吉大计算机编译原理课程设计文档格式.doc_第8页
第8页 / 共44页
SNL语言-吉大计算机编译原理课程设计文档格式.doc_第9页
第9页 / 共44页
SNL语言-吉大计算机编译原理课程设计文档格式.doc_第10页
第10页 / 共44页
SNL语言-吉大计算机编译原理课程设计文档格式.doc_第11页
第11页 / 共44页
SNL语言-吉大计算机编译原理课程设计文档格式.doc_第12页
第12页 / 共44页
SNL语言-吉大计算机编译原理课程设计文档格式.doc_第13页
第13页 / 共44页
SNL语言-吉大计算机编译原理课程设计文档格式.doc_第14页
第14页 / 共44页
SNL语言-吉大计算机编译原理课程设计文档格式.doc_第15页
第15页 / 共44页
SNL语言-吉大计算机编译原理课程设计文档格式.doc_第16页
第16页 / 共44页
SNL语言-吉大计算机编译原理课程设计文档格式.doc_第17页
第17页 / 共44页
SNL语言-吉大计算机编译原理课程设计文档格式.doc_第18页
第18页 / 共44页
SNL语言-吉大计算机编译原理课程设计文档格式.doc_第19页
第19页 / 共44页
SNL语言-吉大计算机编译原理课程设计文档格式.doc_第20页
第20页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

SNL语言-吉大计算机编译原理课程设计文档格式.doc

《SNL语言-吉大计算机编译原理课程设计文档格式.doc》由会员分享,可在线阅读,更多相关《SNL语言-吉大计算机编译原理课程设计文档格式.doc(44页珍藏版)》请在冰点文库上搜索。

SNL语言-吉大计算机编译原理课程设计文档格式.doc

TypeIR * idType;

IdKind kind;

unionMore

struct

{

AccessKind access;

int level;

int offset;

}VarAttr;

int level;

ParamChain * param;

int code;

int size;

}ProcKind;

};

structSymbolChain

int line;

char idName[10];

AttributeIR attrIR;

SymbolChain* next;

};

classanalyze

private:

TreeNode * root;

int level;

SymbolChain * Scope[ScopeMaxLevel];

SymbolChain* Backup[ScopeMaxLevel];

private:

ofstream output;

analyze(ofstreamo,TreeNode*r);

~analyze();

voidPrintSymbolChain();

boolFindField();

boolSearchChain(char*,int,SymbolChain*&

);

boolFindEntry(char*,bool,SymbolChain*&);

boolFindEntry2(char*,SymbolChain*&,IdKind);

boolEnter(char*,SymbolChain*&

voidDestroyChain();

voidCreateChain();

voidanalysis(TreeNode*);

public:

voidRecordType(TreeNode*t,SymbolChain*entry);

voidArrayType(TreeNode*t,SymbolChain*entry);

voidnameType(TreeNode*t,SymbolChain*entry);

SymbolChain*NewTy();

voidTypeProcess(TreeNode*t,SymbolChain*);

voidBody(TreeNode*t);

voidProcDecPart(TreeNode*t);

voidVarDecPart(TreeNode*t);

voidTypeDecPart(TreeNode*t);

staticvoiddoAnalyze(TreeNode*,ofstream);

#endif

/*parse。

#ifndef_PARSE_H_

#define_PARSE_H_

#include"

TokenList。

#include”TreeNode.h"

classparse{

ofstream *output;

TokenList *head;

TokenList *cur;

TreeNode *root;

voidfieldvarMore(TreeNode*t);

TreeNode*fieldvar();

voidvariMore(TreeNode*t);

TreeNode*variable();

TreeNode*factor();

TreeNode*term();

TreeNode*Simple_exp();

TreeNode*Exp();

TreeNode*ActParamMore();

TreeNode*ActParamList();

TreeNode*CallStmRest();

TreeNode*ReturnStm();

TreeNode*OutputStm();

TreeNode*InputStm();

TreeNode*LoopStm();

TreeNode*ConditionalStm();

TreeNode*ArrayRest();

TreeNode*FieldRest();

TreeNode*AssignmentRest();

TreeNode*AllCall();

TreeNode*Stm();

TreeNode*StmMore();

TreeNode*StmList();

TreeNode*ProgramBody();

TreeNode*procBody();

TreeNode*ProcDecPart();

voidFidMore(TreeNode*t);

voidFormList(TreeNode*t);

TreeNode*Param();

TreeNode*ParamMore();

TreeNode*ParamDecList();

voidParamList(TreeNode*t);

TreeNode*ProcDeclaration();

TreeNode*ProcDec();

voidvarIdMore(TreeNode*t);

voidVarIdList(TreeNode*t);

TreeNode*VarDecMore();

TreeNode*VarDecList();

TreeNode*VarDeclaration();

TreeNode*VarDec();

voidIdMore(TreeNode*t);

voidIdList(TreeNode*t);

TreeNode*FieldDecMore();

TreeNode*FieldDecList();

voidRecType(TreeNode*t);

voidArrayType(TreeNode*t);

voidStructureType(TreeNode*t);

voidBaseType(TreeNode*t);

voidTypeDef(TreeNode*t);

voidTypeId(TreeNode*t);

TreeNode*TypeDecMore();

TreeNode*TypeDecList();

TreeNode*TypeDeclaration();

TreeNode*TypeDec();

TreeNode*DeclarePart();

TreeNode*DeclarePart2();

TreeNode*ProgramHead();

TreeNode*Program();

ofstream*getOutputStream();

TokenList*getCur();

TokenList*getHead();

char*getNextTokenSem();

char*getCurrentTokenSem();

voidsetCur(TokenList*t);

voidsetOutputStream(ofstream*o);

voidsetHead(TokenList*t);

boolread();

boolmatchSem(constchar[]);

boolmatchLex(LexTypel);

boolmatchNextLex(LexTypel);

boolmatchNextSem(constchars[]);

LexTypegetNextTokenLex();

LexTypegetCurTokenLex();

parse(TokenList*,ofstream*);

~parse();

voidprintTree(TreeNode*root);

intgetCurrentTokenLineNO();

public:

staticTreeNode*doParse(TokenList*,ofstream*);

/*scan.h*/

#ifndef_SCAN_H_

#define_SCAN_H_

#include"

classscan

staticTokenList*doScan(ifstream*,ofstream*);

ifstream*inputFile;

ofstream*outputFile;

scan();

scan(ifstream*,ofstream*);

~scan();

ifstream*getInputFile();

ofstream*getOutputFile();

voidsetInputFile(ifstream*);

voidsetOutputFile(ofstream*);

voidclearArray();

chargetNextChar();

LexTypelookup(char*);

TokenList*getTokenList();

voidprintTokenList(TokenList*);

/*Token.h*/

#ifndef_TOKEN_H_

#define_TOKEN_H_

#include〈iostream〉

#include<

fstream〉

usingnamespacestd;

enumLexType{

ID, //标识符

CHARC, //字符串

RESERVEDWORD, //保留字

INST, //整型常量符

OP, //运算符

ASSIGN, //赋值运算符

DELIMITER, //分界符

RANGE, //数组下标

POINTER, //结构类型成员运算符

DOT, //程序结束标志

ENDFILE, //文件结束标志

ERROR, //错误符号

};

classToken

Token();

Token(int,char*,LexType);

~Token();

void printToken(ofstream*);

void printToken1();

void setLex(LexType);

void setSem(char*);

void setLine(int);

int getLine();

LexTypegetLex();

char* getSem();

int line;

char* sem;

LexType lex;

/*TokenList.h*/

#ifndef_TOKENLIST_H_

#define_TOKENLIST_H_

#include"

Token.h"

classTokenList{

TokenList();

~TokenList();

void setToken(Token*);

void setNext(TokenList*);

void setNumber(int);

int getNumber();

Token*getToken();

TokenList*getNext();

void append();

intnumber;

Token*token;

TokenList*next;

/*Treenode。

#ifndef_TREENODE_H_

#define_TREENODE_H_

#include〈string>

#include〈iostream〉

#include〈fstream〉

enumNODE_KIND //语法树节点

ProK, //根标志

PheadK, //程序头

TypeK, //类型声明

VarK, //变量声明

ProcDecK, //单个过程声明

StmLK, //语句序列

DecK, //声明节点

StmtK, //语句节点

ExpK //表达式节点

//********************************************************

enumDEC_KIND //具体声明

ArrayK, //数组

CharK, //字符

IntegerK, //整型

RecordK, //记录

IdK //Type定义的类型

enumSTMT_KIND //具体语句

IfK, //if语句

WhileK, //while语句

AssignK, //赋值语句

ReadK, //read语句

WriteK, //write语句

CallK, //过程调用语句

ReturnK //返回语句

enumEXP_KIND //具体表达式

OpK, //操作符

ConstK, //常整型

IdEK, //标识符

ArrayEK, //数组

FieldEK, //域

CHAREK //单字符

unionKIND//记录语法树节点具体类型

DEC_KIND dec;

//声明

STMT_KIND stmt;

//语句

EXP_KIND exp;

//表达式

//*****************************************************************

enumPARAM_TYPE//过程参数属性

valparamtype,//值参

varparamtype//变参

enumEXP_OP_TYPE//表达式运算符类型

LT,

EQ,

PLUS,

MINUS,

TIMES,

OVER

structArrayAttr//数组属性

intlow;

//上界

intup;

//下届

DEC_KINDchildType;

//类型

structProcAttr//过程属性

PARAM_TYPEparamtype;

structExpAttr//表达式属性

EXP_OP_TYPEop;

intval;

structAttr//属性

ArrayAttrarrayattr;

ProcAttrprocattr;

ExpAttrexpattr;

classTreeNode

NODE_KIND nodekind;

TreeNode* child[3];

TreeNode* sibling;

char *idname[3];

int lineno;

KIND kind;

char *type_name;

Attr attr;

int idnum;

int childnum;

//设置表达式属性*****************************************************

voidsetAttrExpVal(inti);

voidsetAttrExpOpType(char*s);

EXP_OP_TYPEgetAttrExpOpType();

//设置过程属性*******************************************************

voidsetProcAttrParamType(PARAM_TYPEd);

//设置数组属性*******************************************************

voidsetArrayAttrType(DEC_KINDd);

voidsetArrayAttrUp(intu);

voidsetArrayAttrLow(intl);

voidsetLineNo(intl);

voidsetNodeKind(NODE_KINDn);

voidsetTypeName(char*s);

voidsetIdName(char*s);

voidsetChild(inti,TreeNode*c);

voidsetChild(TreeNode*);

voidsetSibling(TreeNode*t);

void setKindOfDec(DEC_KIND);

DEC_KIND getKindOfDec();

void setKindOfStmt(STMT_KIND);

void setKindOfExp(EXP_KIND);

TreeNode* getSibling();

TreeNode* getChild(inti);

int getIdNum();

char * getIdName(inti);

~TreeNode();

TreeNode();

TreeNode(NODE_KINDn);

voidprintTreeNode();

voidprintTreeNode(ofstream*out);

#endif

/*zparse.h*/

#ifndef_ZPARSE_H_

#define_ZPARSE_H_

TreeNode。

#include”TokenList.h”

#defineSy_Stack_Max 20//符号栈大小

#defineOpS_Stack_Max 20//操作符栈大小

#defineOpN_Stack_Max 20//操作数栈大小

//******************************************************

//********************非终极符集************************

//******************************************************

enumVN_VT{

VN_Program,//开始符

VN_ProgramHead,

VN_ProgramName,

VN_DeclarePart,

VN_TypeDec,

VN_TypeDeclaration,

VN_TypeDecList,

VN_TypeDecMore,

VN_TypeId,

VN_TypeDef,

VN_BaseType,

VN_Structuretype,

VN_ArrayType,

VN_Low,

VN_Top,

VN_RecType,

VN_FieldDecList,

VN_FieldDecMore,

VN_IdList,

VN_IdMore,

VN_VarDec,

VN_VarDeclaration,

VN_VarDecList,

VN_VarDecMore,

VN_VarIdList,

VN_VarIdMore,

VN_ProcDec,

VN_ProcDeclaration,

VN_ProcDecMore,

VN_ProcName,

VN_ParamList,

VN_ParamDecList,

VN_ParamMore,

VN_Param,

VN_FormList,

VN_FidMore,

VN_ProcDecPart,

VN_ProcBody,

VN_ProgramBody,

VN_StmList,

VN_StmMore,

VN_Stm,

VN_AssCall,

VN_AssignmentRest,

VN_ConditionalStm,

VN_LoopStm,

VN_InputStm,

VN_InVar,

VN_O

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2