⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parser.h

📁 四皇后问题
💻 H
字号:
/*
	Little Smalltalk
		definitions used by parser
*/


enum vartypes {instvar, argvar, tempvar};

struct varstruct {
        struct varstruct *nextvar;
        enum vartypes vtype;
        char *text;
        short position;
        };

enum objtypes {classobj, varobj, instvarobj, contvarobj, 
	litobj, pseuobj, primobj, exprobj, blockobj};

struct objstruct {
        enum objtypes objtype;
        union {
		char *varname;
		int varoffset;
                struct litstruct *litinfo;
                enum   pseuvars pseuinfo;
		struct primstruct *priminfo;
                struct statestruct *stateinfo;
                struct blockstruct *blockinfo;
             } ee;
        };

struct blockstruct {
	int arglocation;
	int numargs;
	struct statestruct *bstates;
	};

enum littypes {numlit, fnumlit, charlit, strlit, symlit, arlit, bytelit};

struct litstruct {
        enum littypes littype;
        union {
                int litint;
                char litchar;
                char *litstr;
                char *litsym;
                struct litlist *litarry;
             } ll;
        };

struct litlist {
        struct litstruct *litele;
        struct litlist *nextlit;
        int    litposition;
        };

struct primstruct {
	int primnumber;
	struct primlist *plist;
	} ;

struct primlist {
	struct primlist *nextprim;
	struct objstruct *pobject;
	};

enum cmdtypes {reccmd, uncmd, bincmd, keycmd, semistart, semiend};

struct exprstruct {
        enum   cmdtypes cmdtype;
        char   *cmdname;
        struct exprstruct *receiver;
        union {
                struct exprstruct *argument;
                struct keylist *keys;
                struct objstruct *recobj;
              } cc;
        struct exprstruct *nextcmd;
        };

enum statetypes {blkupar, upar, asgn, iasgn, casgn, expr};

struct statestruct {
        enum statetypes statetype;
        struct statestruct *nextstate;
        union {
                struct varstruct *variable;
		int varpos;
              } mm;
        union {
                struct statestruct *stateexpr;
                struct exprstruct *cmd;
              } nn;
        };

struct keylist {
        char   *keyword;
        struct exprstruct *arg;
        struct keylist *nextkey;
        };

struct methodstruct {
	struct exprstruct *pattern;
	int    numtempvars;
        struct statestruct *states;
        struct methodstruct *nextmethod;
        };

struct classstruct {
        char *name;
        char *super;
        };

# define structalloc(type) (struct type *) alloc(sizeof (struct type ))

extern struct varstruct *instvars;
extern struct varstruct *contextvars;

# define addinst(x) (instvars = addvlist(mkvar(x, instvar), instvars))

extern char *walloc();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -