📄 machop.c
字号:
/* machop.c We have to implement four operations to machine: CONNECTION: ----------- ----------- ----> | m1 | ----> | m2 | ----------- ----------- UNION: -------- epsilon /| m1 |\ / -------- \ ---->[S] [Z]----> \ / \--------/ | m2 | -------- STAR: ---------- | | v | ----------- | ----->| m1 |----- ----------- SUB-MACHINE: 'ch' ----->[S]-------->[Z]------> */#include "machop.h"#include<stdio.h>#define STKSIZ 10Mach mstk[STKSIZ];int msp = 0;#undef STKSIZ#define PUSH(m) (mstk[msp++] = m)#define POP() (mstk[--msp])#define EMPTY() (msp == 0)#define PEEK() (mstk[msp-1])#define EP '$'void conn(){ Mach m1, m2, m3;
m2 = POP(); m1 = POP(); addtran(m1.t, m2.h, EP); m3.h = m1.h; m3.t = m2.t; PUSH(m3);}void uni(){ Mach m1, m2, m3; stat s, z; m2 = POP(); m1 = POP(); s = new_st(); z = new_st(); addtran(s, m1.h, EP); addtran(s, m2.h, EP); addtran(m1.t, z, EP); addtran(m2.t, z, EP); m3.h = s; m3.t = z; PUSH(m3);}void star(){ Mach m1; m1 = PEEK(); addtran(m1.t, m1.h, EP); addtran(m1.h, m1.t, EP);}void subm(char ch){ Mach m1; stat s, z; s = new_st(); z = new_st(); addtran(s, z, ch); m1.h = s; m1.t = z; PUSH(m1);}void finalm(){ finm = PEEK(); printf("\nstart state: %d\nfinal state: %d\n", finm.h, finm.t);}#undef PUSH#undef POP#undef EMPTY#undef PEEKextern char expr[];extern int elen;void genm(){ int i; puts("\nLevel3:\n\t"); for (i=0; i<elen; i++) { char ch = expr[i]; switch (ch) { case '.': conn(); break; case '|': uni(); break; case '*': star(); break; default: subm(ch); break; } } finalm();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -