编译原理实践教程2010(6)

2019-03-15 18:40

/************ SET.h *************/

#ifndef SET_H #define SET_H

typedef struct snode {

int elem;

struct snode* next; } snode, *symset;

symset phi, declbegsys, statbegsys, facbegsys, relset;

symset createset(int data, .../* SYM_NULL */); void destroyset(symset s);

symset uniteset(symset s1, symset s2); int inset(int elem, symset s);

#endif

// EOF set.h

25

/************ SET.c *************/

#include #include #include #include \

symset uniteset(symset s1, symset s2) {

symset s; snode* p;

s = p = (snode*) malloc(sizeof(snode)); while (s1 && s2) {

p->next = (snode*) malloc(sizeof(snode)); p = p->next;

if (s1->elem < s2->elem) {

p->elem = s1->elem; s1 = s1->next; } else {

p->elem = s2->elem; s2 = s2->next; } }

while (s1) {

p->next = (snode*) malloc(sizeof(snode)); p = p->next;

p->elem = s1->elem; s1 = s1->next; }

while (s2) {

p->next = (snode*) malloc(sizeof(snode)); p = p->next;

p->elem = s2->elem; s2 = s2->next;

26

}

p->next = NULL;

return s; } // uniteset

void setinsert(symset s, int elem) {

snode* p = s; snode* q;

while (p->next && p->next->elem < elem) {

p = p->next; }

q = (snode*) malloc(sizeof(snode)); q->elem = elem; q->next = p->next; p->next = q; } // setinsert

symset createset(int elem, .../* SYM_NULL */) {

va_list list; symset s;

s = (snode*) malloc(sizeof(snode)); s->next = NULL;

va_start(list, elem); while (elem) {

setinsert(s, elem);

elem = va_arg(list, int); }

va_end(list); return s; } // createset

void destroyset(symset s) {

snode* p;

27

while (s) {

p = s;

s = s->next; free(p); }

} // destroyset

int inset(int elem, symset s) {

s = s->next;

while (s && s->elem < elem) s = s->next;

if (s && s->elem == elem) return 1; else

return 0; } // inset

// EOF set.c

28

/************ PL0.c *************/

// pl0 compiler source code

#include #include #include #include #include \#include \

////////////////////////////////////////////////////////////////////// // print error message. void error(n) {

int i;

printf(\

for (i = 1; i <= cc - 1; i++) printf(\ printf(\

printf(\ err++; } // error

////////////////////////////////////////////////////////////////////// void getch(void) {

if (cc == ll) {

if (feof(infile)) {

printf(\ exit(1); }

ll = cc = 0;

printf(\

while (!feof(infile) && (ch = getc(infile))!='\\n') {

printf(\ line[++ll] = ch; } // while printf(\ line[++ll] = ' ';

29


编译原理实践教程2010(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:数据结构与算法实验题答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: