1、an alyze();void Prin tSymbolChai n();bool Fi ndField();bool SearchChai n( char *,i nt,SymbolChain * &);bool FindEntry(char *,bool,SymbolChain * &bool FindEntry2(char *,SymbolChain * &,ldKind);bool En ter(char *,SymbolChain * &void DestroyCha in();void CreateCha in();void an alysis(TreeNode *);public
2、:void RecordType(TreeNode * t,SymbolChain * en try);void ArrayType(TreeNode * t , SymbolChain * en try);void nameType(TreeNode * t , SymbolChain * en try);SymbolChai n * NewTy();void TypeProcess(TreeNode * t , SymbolCha in *);void Body(TreeNode * t);void ProcDecPart(TreeNode * t);void VarDecPart(Tre
3、eNode * t);void TypeDecPart(TreeNode * t);static void doA nalyze(TreeNode * , ofstream );#en dif/* parse.h */#ifndef _PARSE_H_#defi ne _PARSE_H_ #i ncludeToke nList.h#i nclude class parseofstream * output;Toke nList * head;Toke nList * cur;TreeNode* root;void fieldvarMore(TreeNode * t); TreeNode * f
4、ieldvar();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 * In putStm();TreeNode * Loop
5、Stm(); TreeNode * Con ditio nalStm(); TreeNode * ArrayRest();TreeNode * FieldRest(); TreeNode * Assig nmen tRest();TreeNode * AllCall();TreeNode * Stm();TreeNode * StmMore();TreeNode * StmList();TreeNode * ProgramBody(); TreeNode * procBody();TreeNode * ProcDecPart(); void FidMore(TreeNode * t); voi
6、d FormList(TreeNode * t); TreeNode * Param();TreeNode * ParamMore(); TreeNode * ParamDecList();void ParamList(TreeNode * t); TreeNode * ProcDeclarati on(); TreeNode * ProcDec();void varIdMore(TreeNode * t); void VarIdList(TreeNode * t); TreeNode * VarDecMore(); TreeNode * VarDecList(); TreeNode * Va
7、rDeclaratio n(); 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 Ty
8、peId(TreeNode * t); TreeNode * TypeDecMore(); TreeNode * TypeDecList(); TreeNode * TypeDeclarati on(); TreeNode * TypeDec(); TreeNode * DeclarePart(); TreeNode * DeclarePart2(); TreeNode * ProgramHead(); TreeNode * Program();ofstream * getOutputStream();Toke nList * getCur();Toke nList * getHead();c
9、har * getNextToke nSem();char * getCurre ntToke nSem();void setCur(Toke nList * t);void setOutputStream(ofstream * o);void setHead(Toke nList * t);bool read();bool matchSem(c onst char);bool matchLex(LexType l);bool matchNextLex(LexType l);bool matchNextSem(c onst char s);LexType getNextToke nLex();
10、LexType getCurToke nLex();parse(Toke nList * ,ofstream *);parse();void prin tTree(TreeNode * root);in t getCurre ntToke nLin eNO();static TreeNode * doParse(Toke nList * , ofstream *); ;/* scan.h */#ifndef _SCAN_H_#defi ne _SCAN_H_class sca nstatic Toke nList * doSca n(ifstream * ,ofstream *);ifstre
11、am * i nputFile;ofstream * outputFile;sca n();sca n(ifstream * , ofstream *); sca n();ifstream * get In putFile(); ofstream * getOutputFile(); void setlnputFile(ifstream *); void setOutputFile(ofstream *); void clearArray();char getNextChar();LexType lookup(char *); Toke nList * getToke nList(); voi
12、d prin tToke nList(Toke nList *);/* Toke n.h */#ifndef _TOKEN_H_#defi ne _TOKEN_H_#in cludefstreamusing n amespace std;enum LexType ID, 标识符CHARC, 字符串RESERVEDWORD, / 保留字INST, 整型常量符OP, 运算符ASSIGN, 赋值运算符DELIMITER, 分界符RANGE, 数组下标POINTER, 结构类型成员运算符DOT, 程序结束标志ENDFILE, 文件结束标志ERROR, 错误符号class Toke nToke n();
13、Toke n(i nt, char*,LexType);Toke n();void prin tToke n(o fstream *);void prin tToke n1();void setLex(LexType);void setSem(char *);void setL in e(i nt);/*Toke nList.h*/#ifndef _TOKENLIST_H_#defi ne _TOKENLIST_H_#i nclude Toke n.h class Toke nList public:Toke nList();Toke nList();void setToke n(Toke n
14、 *); void setNext(Toke nList *); void setNumber(i nt);int getNumber(); Toke n * getToke n(); Toke nList * getNext(); void appe nd();int nu mber;Toke n * toke n;Toke nList * n ext;/* en um DEC_KIND 具体声明ArrayK, / 数组CharK, 字符In tegerK, / 整型RecordK, / 记录IdK /Type定义的类型en um STMT_KIND 具体语句IfK, /if 语句While
15、K, /while 语句AssignK, /赋值语句ReadK,/read语句WriteK,/write 语句CallK,/过程调用语句ReturnK/返回语句enum EXP_KIND/具体表达式OpK,操作符Con stK,/常整型IdEK,/标识符/* Tree no de.h */#ifndef _TREENODE_H_#defi ne _TREENODE_H_#in elude en um NODE_KIND 语法树节点ArrayEK, 数组FieldEK, / 域CHAREK 单字符union KIND/记录语法树节点具体类型 DEC_KIND dec;/ 声明STMT_KIND
16、stmt;/ 语句EXP_KIND exp;/ 表达式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
17、val;struct Attr / 属性ArrayAttr arrayattr;ProcAttr procattr; ExpAttr expattr;class TreeNode public:NODE_KIND nodekind;TreeNode * child3;TreeNode * sibling;char * idname3;int lineno;KIND kind;char * type_name;int idnum;int childnum;/ 设 置 表 达 式 属 性*void setAttrExpVal(int i);void setAttrExpOpType(char *
18、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 se
19、tChild (int i , TreeNode * c);void setChild(TreeNode *);void setSibling(TreeNode * t);void setKindOfDec(DEC_KIND);DEC_KIND getKindOfDec();void setKindOfStmt(STMT_KIND);void setKindOfExp(EXP_KIND);TreeNode * getSibling();TreeNode * getChild(int i);int getIdNum();char * getIdName(int i);TreeNode();Tre
20、eNode();TreeNode(NODE_KIND n);void printTreeNode();void printTreeNode(ofstream * out);/* zparse.h */#ifndef _ZPARSE_H_ #defi ne _ZPARSE_H_ #in elude #in clude #define Sy_Stack_Max 20 /符号栈大小#defi ne OpS_Stack_Max 20 操作符栈大小 #defi ne OpN_Stack_Max 20 操作数栈大小*en um VN_VTVN_Program, 开始符 VN_ProgramHead, VN
21、_ProgramName, VN_DeclarePart,VN_TypeDec, VN_TypeDeclarati on, 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_V arDec, VN_V arDeclarati on, VN_V arDecList, VN_V ar
22、DecMore, VN_VarldList, VN_VarldMore, VN_ProcDec,VN_ProcDeclarati on,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_Assig nme ntRest, VN_Co nditi o
23、n alStm, VN_LoopStm, VNn putStm, VN_I nVar, 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_Bas
24、eTypeOfArray, vt_program = 70,/ 为了与 VN 区分 vt_id, vt_type, vt_var, vt_procedure, vt_begi n,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, v
25、t_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_errorclass treestack public:TreeNode * & tree; treestack * next; treestack * pre; treestack(TreeNode * & t):tree(t),next(NULL),pre(NULL)/ /*/*zparse 类*class zparsetreestack* currentTree;* headTree;treeNum;voidtree_push(TreeNode * &tree_pop();TreeNode* OptrOpS_Stack_Max;optrtop;optr_push(TreeNode * );* optr_pop();* OpndOpN_Stack_Max;opndtop;opnd_push(TreeNode * );* opnd_pop()
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2