![SNL语言-吉大计算机编译原理课程设计_第1页](http://file1.renrendoc.com/fileroot_temp2/2020-4/30/c1f37450-028e-49d4-a791-79149ba4e8f2/c1f37450-028e-49d4-a791-79149ba4e8f21.gif)
![SNL语言-吉大计算机编译原理课程设计_第2页](http://file1.renrendoc.com/fileroot_temp2/2020-4/30/c1f37450-028e-49d4-a791-79149ba4e8f2/c1f37450-028e-49d4-a791-79149ba4e8f22.gif)
![SNL语言-吉大计算机编译原理课程设计_第3页](http://file1.renrendoc.com/fileroot_temp2/2020-4/30/c1f37450-028e-49d4-a791-79149ba4e8f2/c1f37450-028e-49d4-a791-79149ba4e8f23.gif)
![SNL语言-吉大计算机编译原理课程设计_第4页](http://file1.renrendoc.com/fileroot_temp2/2020-4/30/c1f37450-028e-49d4-a791-79149ba4e8f2/c1f37450-028e-49d4-a791-79149ba4e8f24.gif)
![SNL语言-吉大计算机编译原理课程设计_第5页](http://file1.renrendoc.com/fileroot_temp2/2020-4/30/c1f37450-028e-49d4-a791-79149ba4e8f2/c1f37450-028e-49d4-a791-79149ba4e8f25.gif)
已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SNL语言_吉大计算机编译原理课程设计/* analyze.h */#ifndef _ANALYZE_H_#define _ANALYZE_H_#define ScopeMaxLevel 20#include TreeNode.henum IdKind typeKind , varKind , procKind ;enum TypeKind intType , charType , arrayType , recordType , boolType;enum AccessKind dir , indir ;struct TypeIR;struct SymbolChain;struct ParamChainSymbolChain*entry;ParamChain*next;struct FieldChain charidName10;TypeIR*unitType;intoffset;FieldChain*next;struct TypeIRintsize;TypeKindkind;union struct TypeIR*indexType;TypeIR*elementType;ArrayAttr;FieldChain*body;More;struct AttributeIRTypeIR*idType;IdKindkind;union Morestruct AccessKindaccess;intlevel;intoffset;VarAttr;struct intlevel;ParamChain*param;intcode;intsize;ProcKind;struct SymbolChainintline;charidName10;AttributeIRattrIR;SymbolChain *next;class analyzeprivate:TreeNode*root; intlevel;SymbolChain*ScopeScopeMaxLevel;SymbolChain *BackupScopeMaxLevel;private:ofstreamoutput;analyze(ofstream o, TreeNode * r);analyze();void PrintSymbolChain();bool FindField();bool SearchChain(char *,int,SymbolChain * &);bool FindEntry(char *,bool,SymbolChain * &);bool FindEntry2(char *,SymbolChain * &,IdKind);bool Enter(char *,SymbolChain * &);void DestroyChain();void CreateChain();void analysis(TreeNode *);public:void RecordType(TreeNode * t,SymbolChain * entry);void ArrayType(TreeNode * t , SymbolChain * entry);void nameType(TreeNode * t , SymbolChain * entry);SymbolChain * NewTy();void TypeProcess(TreeNode * t , SymbolChain *);void Body(TreeNode * t);void ProcDecPart(TreeNode * t);void VarDecPart(TreeNode * t);void TypeDecPart(TreeNode * t);static void doAnalyze(TreeNode * , ofstream );#endif/* parse.h */#ifndef _PARSE_H_#define _PARSE_H_#includeTokenList.h#includeTreeNode.hclass parseprivate:ofstream* output;TokenList* head;TokenList* cur;TreeNode* root;void fieldvarMore(TreeNode * t);TreeNode * fieldvar();void variMore(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();void FidMore(TreeNode * t);void FormList(TreeNode * t);TreeNode * Param();TreeNode * ParamMore();TreeNode * ParamDecList();void ParamList(TreeNode * t);TreeNode * ProcDeclaration();TreeNode * ProcDec();void varIdMore(TreeNode * t);void VarIdList(TreeNode * t);TreeNode * VarDecMore();TreeNode * VarDecList();TreeNode * VarDeclaration();TreeNode * VarDec();void IdMore(TreeNode * t);void IdList(TreeNode * t);TreeNode * FieldDecMore();TreeNode * FieldDecList();void RecType(TreeNode * t);void ArrayType(TreeNode * t);void StructureType(TreeNode * t);void BaseType(TreeNode * t);void TypeDef(TreeNode * t);void TypeId(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();void setCur(TokenList * t);void setOutputStream(ofstream * o);void setHead(TokenList * t);bool read();bool matchSem(const char);bool matchLex(LexType l);bool matchNextLex(LexType l);bool matchNextSem(const char s);LexType getNextTokenLex();LexType getCurTokenLex();parse(TokenList * ,ofstream *);parse();void printTree(TreeNode * root);int getCurrentTokenLineNO();public:static TreeNode * doParse(TokenList * , ofstream *);#endif/* scan.h */#ifndef _SCAN_H_#define _SCAN_H_#include TokenList.hclass scanpublic:static TokenList * doScan(ifstream * ,ofstream *);private:ifstream * inputFile;ofstream * outputFile;scan();scan(ifstream * , ofstream *);scan();ifstream * getInputFile();ofstream * getOutputFile();void setInputFile(ifstream *);void setOutputFile(ofstream *);void clearArray();char getNextChar();LexType lookup(char *);TokenList * getTokenList();void printTokenList(TokenList *);#endif/* Token.h */#ifndef _TOKEN_H_#define _TOKEN_H_#include#includeusing namespace std;enum LexType ID,/标识符CHARC,/字符串RESERVEDWORD,/保留字INST,/整型常量符OP,/运算符ASSIGN,/赋值运算符DELIMITER,/分界符RANGE,/数组下标POINTER,/结构类型成员运算符DOT,/程序结束标志ENDFILE,/文件结束标志ERROR,/错误符号;class Tokenpublic:Token();Token(int, char*,LexType);Token();voidprintToken(ofstream *);voidprintToken1();voidsetLex(LexType);voidsetSem(char *);voidsetLine(int);intgetLine();LexType getLex();char *getSem();private:intline;char *sem;LexTypelex;#endif/*TokenList.h*/#ifndef _TOKENLIST_H_#define _TOKENLIST_H_#include Token.hclass TokenListpublic:TokenList();TokenList();voidsetToken(Token *);voidsetNext(TokenList *);voidsetNumber(int);intgetNumber();Token * getToken();TokenList * getNext();voidappend();private:int number;Token * token;TokenList * next;#endif/* Treenode.h */#ifndef _TREENODE_H_#define _TREENODE_H_#include #include #include using namespace std;enum NODE_KIND/语法树节点ProK,/根标志PheadK,/程序头TypeK,/类型声明VarK,/变量声明ProcDecK,/单个过程声明StmLK,/语句序列DecK,/声明节点StmtK,/语句节点ExpK/表达式节点;/*enum DEC_KIND/具体声明ArrayK,/数组CharK,/字符IntegerK,/整型RecordK,/记录IdK/Type定义的类型;enum STMT_KIND/具体语句IfK,/if语句WhileK,/while语句AssignK,/赋值语句ReadK,/read语句WriteK,/write语句CallK,/过程调用语句ReturnK/返回语句;enum EXP_KIND/具体表达式OpK,/操作符ConstK,/常整型IdEK,/标识符ArrayEK,/数组FieldEK,/域CHAREK/单字符;union KIND/记录语法树节点具体类型DEC_KINDdec;/声明STMT_KINDstmt;/语句EXP_KINDexp;/表达式;/*enum PARAM_TYPE/过程参数属性valparamtype,/值参varparamtype/变参;enum EXP_OP_TYPE/表达式运算符类型LT,EQ,PLUS,MINUS,TIMES,OVER;struct ArrayAttr/数组属性int low;/上界int up;/下届DEC_KIND childType;/类型;struct ProcAttr /过程属性PARAM_TYPE paramtype;struct ExpAttr /表达式属性EXP_OP_TYPE op;int val;struct Attr /属性ArrayAttr arrayattr;ProcAttr procattr;ExpAttr expattr;class TreeNodepublic:NODE_KINDnodekind;TreeNode *child3;TreeNode *sibling;char * idname3;intlineno;KINDkind;char * type_name;Attrattr;intidnum;intchildnum;public:/设置表达式属性*void setAttrExpVal(int i);void setAttrExpOpType(char * s);EXP_OP_TYPE getAttrExpOpType();/设置过程属性*void setProcAttrParamType(PARAM_TYPE d);/设置数组属性*void setArrayAttrType(DEC_KIND d);void setArrayAttrUp(int u);void setArrayAttrLow(int l);void setLineNo(int l);void setNodeKind(NODE_KIND n);void setTypeName(char * s);void setIdName(char *s);void setChild (int i , TreeNode * c);void setChild(TreeNode *);void setSibling(TreeNode * t);voidsetKindOfDec(DEC_KIND);DEC_KINDgetKindOfDec();voidsetKindOfStmt(STMT_KIND);voidsetKindOfExp(EXP_KIND);TreeNode *getSibling();TreeNode *getChild(int i);intgetIdNum();char*getIdName(int i);TreeNode();TreeNode();TreeNode(NODE_KIND n);void printTreeNode();void printTreeNode(ofstream * out);#endif/* zparse.h */#ifndef _ZPARSE_H_#define _ZPARSE_H_#include TreeNode.h#include TokenList.h#define Sy_Stack_Max20 /符号栈大小#define OpS_Stack_Max20 /操作符栈大小#define OpN_Stack_Max 20 /操作数栈大小/*/*非终极符集*/*enum VN_VTVN_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_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;class treestackpublic:TreeNode * & tree;treestack * next;treestack * pre;treestack(TreeNode * & t):tree(t),next(NULL),pre(NULL);/*/*zparse类*/*class zparsepublic:treestack *currentTree;treestack *headTree;inttreeNum;voidtree_push(TreeNode * &);void tree_pop();TreeNode *OptrOpS_Stack_Max;intoptrtop;voidoptr_push(TreeNode * );TreeNode * optr_pop();TreeNode *OpndOpN_Stack_Max;intopndtop;voidopnd_push(TreeNode * );TreeNode * opnd_pop();private:TokenList*head;/TokenList头节点TokenList*cur;/TokenList当前节点TreeNode*root;/语法树根节点ofstream*output;/输出语法树intLL1Table7041;/语法分析表VN_VTSy_StackSy_Stack_Max;intsy_top;voidsy_push(VN_VT);VN_VTsy_pop();zparse(TokenList * , ofstream *);zparse();boolread();TokenList *getCur();intgetCurrentTokenLineNO();char *getCurrentTokenSem();LexTypegetCurrentTokenLex();boolmatchSem(const char);boolmatchLex(LexType l);intconvertTokenToVT();boolmatchVT();voidExceptionThrow();TreeNode *parseLL();voidCreateTable();voidpredict(int num);intPriosity(TreeNode *);void process1();void process2();void process3();void process4();void process5();void process6();void process7();void process8();void process9();void process10();void process11();void process12();void process13();void process14();void process15();void process16();void process17();void process18();void process19();void process20();void process21();void process22();void process23();void process24();void process25();void process26();void process27();void process28();void process29();void process30();void process31();void process32();void process33();void process34();void process35();void process36();void process37();void process38();void process39();void process40();void process41();void process42();void process43();void process44();void process45();void process46();void process47();void process48();void process49();void process50();void process51();void process52();void process53();void process54();void process55();void process56();void process57();void process58();void process59();void process60();void process61();void process62();void process63();void process64();void process65();void process66();void process67();void process68();void process69();void process70();void process71();void process72();void process73();void process74();void process75();void process76();void process77();void process78();void process79();void process80();void process81();void process82();void process83();void process84();void process85();void process86();void process87();void process88();void process89();void process90();void process91();void process92();void process93();void process94();void process95();void process96();void process97();void process98();void process99();void process100();void process101();void process102();void process103();void process104();void process105();void process106();void printTree(TreeNode * root);public:static TreeNode * doZParse(TokenList * ,ofstream *);#endif/* analyze.cpp */#include analyze.hint aexception;char * exceName;void ExceptionThrow(TreeNode * t)aexception = t-lineno;if (t-getIdName(0) != NULL)strcpy(exceName , t-getIdName(0);throw(exceName);throw(aexception);void analyze:doAnalyze(TreeNode * t, ofstream o)tryanalyze analyzer(o , t);analyzer.analysis(analyzer.root);catch(int exception)couterror in line exceptionendl;catch(char * exceName)coutexceName is illegalidName) = 0)return false;elsecurrent = current-next;current = NewTy();current2-next = current;entry = current;return true;void analyze:analysis(TreeNode * t)TreeNode * p = t-child1;while (p != NULL)switch (p-nodekind)case TypeK:TypeDecPart(p-child0);break;case VarK:VarDecPart(p-child0);break;case ProcDecK:ProcDecPart(p-child0);break;default:ExceptionThrow(p);p = p-sibling;p = t-child2;if (p-nodekind = StmLK)Body(p);if (level != -1)DestroyChain();void analyze:TypeDecPart(TreeNode * t)bool present = false;SymbolChain * entry;while (t != NULL)present = Enter(t-idname0 , entry);if (present = true)coutrepetition declaration,illegal id-idname0idName , t-idname0);TypeProcess(t , entry);t = t-sibling;void analyze:TypeProcess(TreeNode *t , SymbolChain * entry)switch (t-getKindOfDec()case IntegerK:entry-attrIR.idType-kind = intType;entry-attrIR.idType-size = 1;break;case CharK:entry-attrIR.idType-kind = charType;entry-attrIR.idType-size = 1;break;case IdK:nameType(t , entry);break;case ArrayK:ArrayType(t,entry);break;case RecordK:RecordType(t,entry);break;SymbolChain * analyze:NewTy()SymbolChain * s = (SymbolChain *)malloc(sizeof(SymbolChain);s-attrIR.idType = (TypeIR *)malloc(sizeof(TypeIR);s-attrIR.kind = typeKind;s-next = NULL;return s;bool analyze:FindEntry2(char * type , SymbolChain * & entry , IdKind i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年电子书阅读器项目可行性研究报告
- 2025至2031年中国独立收线机行业投资前景及策略咨询研究报告
- 2025年机车空调电源整机测试仪项目可行性研究报告
- 2025年室内型温度传感器/变送器项目可行性研究报告
- 2025至2031年中国刚性防水干混砂浆行业投资前景及策略咨询研究报告
- 2025年冲浪板项目可行性研究报告
- 2025年上嘴过滤瓶项目可行性研究报告
- 2025至2030年高光水性高耐磨上光油项目投资价值分析报告
- 2025至2030年金属瓷牙项目投资价值分析报告
- 2025至2030年耐磨高锰钢轧臼壁项目投资价值分析报告
- 2024建筑用辐射致冷涂料
- 2024版《糖尿病健康宣教》课件
- 2024年辽宁铁道职业技术学院高职单招(英语/数学/语文)笔试历年参考题库含答案解析
- 社区工作者经典备考题库(必背300题)
- 广东省紧密型县域医共体双向转诊管理中心运行指南
- PEP人教版小学英语单词卡片四年级下卡片
- 新部编版六年级下册道德与法治全册教案(教学设计)
- 小学英语六年级上册Unit1-The-king’s-new-clothes-第1课时课件
- 教练技术一阶段讲义(共59页)
- 精品课程建设验收自评报告
- 未成年人需办银行卡证明(模板)
评论
0/150
提交评论