📄 cmm.h
字号:
#include <stdio.h>#include <string.h>#include <stdlib.h>typedef enum { false, true} bool;#define norw 8 /* 关键字个数 */#define txmax 100 /* 名字表的最大容量 */#define al 10 /* Token的最大长度 *//* Token的类型 */enum symbol { nul, ident, number, plus, minus, real, times, slash, eql, neq, lss, leq, gtr, geq, lparen, assign, lbracket, rbracket, lbrace, rbrace, rparen, comma, semicolon, period, constsym, elsesym, ifsym, intsym, readsym, realsym, whilesym, writesym};enum object { constant, variable,};struct tablestruct { char name[al]; /* 名字 */ enum object kind; /* 类型:const,var,array or procedure */ int var; /* 数值,仅const使用 */ int level; /* 所处层,仅const不使用 */ int adr; /* 地址,仅const不使用 */ int size; /* 需要分配的数据空间,仅procedure使用 */};struct tablestruct table[txmax]; /* 名字表 */#define symnum 32 /* 有多少种Token */#define iden 3 /* 缩进大小 */char ch; /* 获取字符的缓冲区,getch使用 */enum symbol sym; /* 当前的Token的类型 */char id[ al+1 ]; /* 当前的ident,多出的一个字节用于存放0 */char a[al+1]; /* 临时id,多出的一个字节用于存放0 */int num; /* 当前的number */#define nmax 14 /* number的最大位数 */int cc,ll; /* ll表示当前行的字符数,cc表示当前字符在当前行的位置 */char line[81]; /* 读取行缓冲区 */char word[norw][al]; /* 保留字 */enum symbol wsym[norw]; /* 保留字对应的Token类型 */enum symbol ssym[256]; /* 单字符的Token类型 */FILE * fin; /* 输入文件的指针 */FILE * fout; /* 输出 */char *fname; /* 输入文件的地址 */char value[al+1]; /* 存储当前Token的值 */float realvalue; /* 当前小数的值 */float e = 0.1; /* 处理小数部分的参数 */int linenum; /* 当前行 */#define getchdo if(-1==getch()) return -1#define getsymdo if(-1==getsym()) return -1int getch();void init();int getsym();void printsym(int offset);void printline();void printspace(int lev);int error(int eid);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -