SNL语言吉大计算机编译原理课程设计Word格式文档下载.docx

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

SNL语言吉大计算机编译原理课程设计Word格式文档下载.docx

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

SNL语言吉大计算机编译原理课程设计Word格式文档下载.docx

〜analyze();

voidPrintSymbolChain();

boolFindField();

boolSearchChain(char*,int,SymbolChain*&

);

boolFindEntry(char*,bool,SymbolChain*&

boolFindEntry2(char*,SymbolChain*&

ldKind);

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.h*/

#ifndef_PARSE_H_

#define_PARSE_H_#include"

TokenList.h"

#include"

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();

staticTreeNode*doParse(TokenList*,ofstream*);

};

/*scan.h*/

#ifndef_SCAN_H_

#define_SCAN_H_

classscan

staticTokenList*doScan(ifstream*,ofstream*);

ifstream*inputFile;

ofstream*outputFile;

scan();

scan(ifstream*,ofstream*);

~scan();

ifstream*getInputFile();

ofstream*getOutputFile();

voidsetlnputFile(ifstream*);

voidsetOutputFile(ofstream*);

voidclearArray();

chargetNextChar();

LexTypelookup(char*);

TokenList*getTokenList();

voidprintTokenList(TokenList*);

/*Token.h*/

#ifndef_TOKEN_H_

#define_TOKEN_H_

#include<

iostream>

fstream>

usingnamespacestd;

enumLexType{

ID,〃标识符

CHARC,〃字符串

RESERVEDWORD,//保留字

INST,〃整型常量符

OP,〃运算符

ASSIGN,〃赋值运算符

DELIMITER,〃分界符

RANGE,〃数组下标

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

DOT,〃程序结束标志

ENDFILE,〃文件结束标志

ERROR,〃错误符号

classToken

Token();

Token(int,char*,LexType);

~Token();

voidprintToken(ofstream*);

voidprintToken1();

voidsetLex(LexType);

voidsetSem(char*);

voidsetLine(int);

/*TokenList.h*/

#ifndef_TOKENLIST_H_

#define_TOKENLIST_H_

#include"

Token.h"

classTokenList{public:

TokenList();

~TokenList();

voidsetToken(Token*);

voidsetNext(TokenList*);

voidsetNumber(int);

intgetNumber();

Token*getToken();

TokenList*getNext();

voidappend();

intnumber;

Token*token;

TokenList*next;

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

***********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,

//标识符

/*Treenode.h*/

#ifndef_TREENODE_H_

#define_TREENODE_H_

#inelude<

string>

enumNODE_KIND〃语法树节点

ArrayEK,〃数组

FieldEK,//域

CHAREK〃单字符

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

DEC_KINDdec;

//声明

STMT_KINDstmt;

//语句

EXP_KINDexp;

//表达式

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

{public:

NODE_KINDnodekind;

TreeNode*child[3];

TreeNode*sibling;

char*idname[3];

intlineno;

KINDkind;

char*type_name;

intidnum;

intchildnum;

//设置表达式属性

**********************************************

*******

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);

voidsetKindOfDec(DEC_KIND);

DEC_KINDgetKindOfDec();

voidsetKindOfStmt(STMT_KIND);

voidsetKindOfExp(EXP_KIND);

TreeNode*getSibling();

TreeNode*getChild(inti);

intgetIdNum();

char*getIdName(inti);

~TreeNode();

TreeNode();

TreeNode(NODE_KINDn);

voidprintTreeNode();

voidprintTreeNode(ofstream*out);

/*zparse.h*/

#ifndef_ZPARSE_H_#define_ZPARSE_H_#inelude"

#include"

#defineSy_Stack_Max20//符号栈大小

#defineOpS_Stack_Max20〃操作符栈大小#defineOpN_Stack_Max20〃操作数栈大小

〃*********************************************

************************

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_VarldList,VN_VarldMore,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」nputStm,VN_InVar,VN_OutputStm,VN_ReturnStm,VN_CallStmRest,VN_ActParamList,VN_ActParamMore,VN_RelExp,VN_OtherRelExp,VN_Exp,VN_OtherTerm,VN_Term,VN_OtherFactor,VN_Factor,VN_Variable,VN_VariMore,VN_FieldVar,VN_FieldVarMore,VN_CmpOp,VN_AddOp,VN_MultOp,VN_BaseTypeOfArray,vt_program=70,//为了与VN区分vt_id,vt_type,vt_var,vt_procedure,vt_begin,

vt_integer,vt_char,vt_array,vt_arraydot,vt_of,vt_record,vt_intc,vt_end,vt_semicolon,vt_comma,vt_rparen,vt_lparen,vt_if,vt_while,vt_return,vt_read,vt_write,vt_else,vt_fi,vt_endwh,vt_assign,vt_lmidparen,vt_pointer,vt_dot,vt_lt,vt_eq,vt_rmidparen,vt_then,vt_do,vt_plus,vt_minus,vt_mul,vt_div,vt_charc,vt_error

classtreestack{public:

TreeNode*&

tree;

treestack*next;

treestack*pre;

treestack(TreeNode*&

t):

tree(t),next(NULL),pre(NULL){}

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

//******************zparse类

**************************

classzparse{

treestack

*currentTree;

*headTree;

treeNum;

void

tree_push(TreeNode*&

tree_pop();

TreeNode

*Optr[OpS_Stack_Max];

optrtop;

optr_push(TreeNode*);

*optr_pop();

*Opnd[OpN_Stack_Max];

opndtop;

opnd_push(TreeNode*);

*opnd_pop()

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

当前位置:首页 > 解决方案 > 学习计划

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

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