Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
typedef struct ProgramS *Program; typedef struct BodyS *Body; typedef struct DecListS *DecList; typedef struct DecS *Dec; typedef struct VarDecListS *VarDecList; typedef struct VarDecS *VarDec; typedef struct TypeDecListS *TypeDecList; typedef struct TypeDecS *TypeDec; typedef struct ProcDecListS *ProcDecList; typedef struct ProcDecS *ProcDec; typedef struct TypeS *Type; typedef struct ComponentListS *ComponentList; typedef struct ComponentS *Component; typedef struct FormalParamListS *FormalParamList; typedef struct FormalParamS *FormalParam; typedef struct StatListS *StatList; typedef struct StatS *Stat; typedef struct ExpListS *ExpList; typedef struct ExpS *Exp; typedef struct RecordInitListS *RecordInitList; typedef struct RecordInitS *RecordInit; typedef struct ArrayInitListS *ArrayInitList; typedef struct ArrayInitS *ArrayInit; typedef struct LvalueListS *LvalueList; typedef struct LvalueS *Lvalue; typedef enum {GT=0,LT,EQ,GE,LE,NE,PLUS,MINUS,TIMES,SLASH,DIV,MOD,AND,OR} binop; typedef enum {UPLUS,UMINUS,NOT} unop; typedef char *id, *string; struct ProgramS { Body b; }; struct BodyS { int line; DecList dl; Stat s; }; struct DecListS { Dec d; DecList next; }; struct DecS { enum{VarDecs=0,TypeDecs,ProcDecs} kind; union { struct { VarDecList vl; } vardecs; struct { TypeDecList tl; } typedecs; struct { ProcDecList pl; } procdecs; } u; }; struct VarDecListS { VarDec v; VarDecList next; }; struct VarDecS { int line; id i; Type t; Exp e; }; struct TypeDecListS { TypeDec t; TypeDecList next; }; struct TypeDecS { int line; id i; Type t; }; struct ProcDecListS { ProcDec p; ProcDecList next; }; struct ProcDecS { int line; id i; FormalParamList fl; Type t; Body b; }; struct TypeS { int line; enum{NamedTyp=0,ArrayTyp,RecordTyp} kind; union { struct { id i; } namedtyp; struct { Type t; } arraytyp; struct { ComponentList cl; } recordtyp; } u; }; struct ComponentListS { Component c; ComponentList next; }; struct ComponentS { int line; id i; Type t; }; struct FormalParamListS { FormalParam f; FormalParamList next; }; struct FormalParamS { int line; id i; Type t; }; struct StatListS { Stat s; StatList next; }; struct StatS { int line; enum{AssignSt=0,CallSt,ReadSt,WriteSt,IfSt,WhileSt,LoopSt,ForSt,ExitSt,RetSt,SeqSt} kind; union { struct { Lvalue l; Exp e; } assignst; struct { id i; ExpList el; } callst; struct { LvalueList ll; } readst; struct { ExpList el; } writest; struct { Exp e; Stat s1, s2; } ifst; struct { Exp e; Stat s; } whilest; struct { Stat s; } loopst; struct { id i; Exp e1, e2, e3; Stat s; } forst; struct { Exp e; } retst; struct { StatList sl; } seqst; } u; }; struct ExpListS { Exp e; ExpList next; }; struct ExpS { int line; enum{BinOpExp=0,UnOpExp,LvalExp,CallExp,RecordExp,ArrayExp,IntConst,RealConst,StringConst} kind; union { struct { binop b; Exp e1, e2; } binopexp; struct { unop u; Exp e; } unopexp; struct { Lvalue l; } lvalexp; struct { id i; ExpList el; } callexp; struct { id i; RecordInitList rl; } recordexp; struct { id i; ArrayInitList al; } arrayexp; struct { int i; } intconstexp; struct { string r; } realconstexp; struct { string c; } stringconstexp; } u; }; struct RecordInitListS { RecordInit r; RecordInitList next; }; struct RecordInitS { id i; Exp e; }; struct ArrayInitListS { ArrayInit a; ArrayInitList next; }; struct ArrayInitS { Exp e1, e2; }; struct LvalueListS { Lvalue l; LvalueList next; }; struct LvalueS { int line; enum{Var=0,ArrayDeref,RecordDeref} kind; union { struct { id i; } var; struct { Lvalue l; Exp e; } arrayderef; struct { Lvalue l; id i; } recordderef; }u; }; /* constructor functions for asts */ Program mk_Program(Body b); Body mk_Body(int line, DecList dl, Stat s); DecList mk_DecList(Dec d, DecList next); Dec mk_VarDecs(VarDecList vl); Dec mk_TypeDecs(TypeDecList tl); Dec mk_ProcDecs(ProcDecList pl); VarDecList mk_VarDecList(VarDec v, VarDecList next); VarDec mk_VarDec(int line,id i, Type t, Exp e); TypeDecList mk_TypeDecList(TypeDec t, TypeDecList next); TypeDec mk_TypeDec(int line, id i, Type t); ProcDecList mk_ProcDecList(ProcDec p, ProcDecList next); ProcDec mk_ProcDec(int line, id i, FormalParamList fl, Type t, Body b); Type mk_NamedType(int line,id i); Type mk_ArrayType(int line,Type t); Type mk_RecordType(int line,ComponentList cl); ComponentList mk_ComponentList(Component c, ComponentList next); Component mk_Component(int line, id i, Type t); FormalParamList mk_FormalParamList(FormalParam f, FormalParamList next); FormalParam mk_FormalParam(int line, id i, Type t); StatList mk_StatList(Stat s, StatList next); Stat mk_AssignStat(int line, Lvalue l, Exp e); Stat mk_CallStat(int line, id i, ExpList el); Stat mk_ReadStat(int line, LvalueList ll); Stat mk_WriteStat(int line, ExpList el); Stat mk_IfStat(int line, Exp e, Stat s1, Stat s2); Stat mk_WhileStat(int line, Exp e, Stat s1); Stat mk_LoopStat(int line, Stat s1); Stat mk_ForStat(int line, id i, Exp e1, Exp e2, Exp e3, Stat s1); Stat mk_ExitStat(int line); Stat mk_RetStat(int line, Exp e); Stat mk_SeqStat(StatList sl); ExpList mk_ExpList(Exp e, ExpList next); Exp mk_BinOpExp(int line, binop b, Exp e1, Exp e2); Exp mk_UnOpExp(int line, unop u, Exp e1); Exp mk_LvalExp(int line, Lvalue l); Exp mk_CallExp(int line, id i, ExpList el); Exp mk_ArrayExp(int line, id i, ArrayInitList al); Exp mk_RecordExp(int line, id i, RecordInitList rl); Exp mk_IntConstExp(int line, int i); Exp mk_RealConstExp(int line, string r); Exp mk_StringConstExp(int line, string c); RecordInitList mk_RecordInitList(RecordInit r, RecordInitList next); RecordInit mk_RecordInit(id i, Exp e); ArrayInitList mk_ArrayInitList(ArrayInit a, ArrayInitList next); ArrayInit mk_ArrayInit(Exp e1, Exp e2); LvalueList mk_LvalueList(Lvalue l, LvalueList next); Lvalue mk_VarLvalue(int line, id i); Lvalue mk_ArrayDerefLvalue(int line, Lvalue l1, Exp e); Lvalue mk_RecordDerefLvalue(int line, Lvalue l1, id i); char *strsave(char *s); /* print program tree */ void print_Program(FILE *out,Program p);