实验报告
学院(系)名称:计算机与通信工程学院
姓名 班级 课程名称 学号 实验项目 编译原理 2016/03/17 2016/03/22 专业 计算机科学与技术 实验一:词法分析 课程代码 实验时间 实验地点 软件实验室7-219 批改意见 成绩 教师签字: 实验内容: 实现标准C语言词法分析器。 实验要求: (1)单词种别编码要求 基本字、运算符、界符:一符一种 标识符:统一为一种; 常量:按类型编码; (2)词法分析工作过程中建立符号表、常量表。 并以文本文件形式输出。 (3)词法分析的最后结果以文本文件形式输出。
第1页 共23页
实验源代码和心得体会 #include
#define INCLUDE 256 #define AUTO 257 #define BREAK 258 #define CASE 259 #define CHAR 260 #define CONST 261 #define CONTINUE 262 #define DEFAULT 263 #define DO 264 #define DOUBLE 265 #define ELSE 266 #define ENUM 267 #define EXTERN 268 #define FLOAT 269 #define FOR 270 #define GOTO 271 #define IF 272 #define INT 273 #define LONG 274 #define REGISTER 275 #define RETURN 276 #define SHORT 277 #define SIGNED 278 #define SIZEOF 279 #define STATIC 280 #define STRUCT 281 #define SWITCH 282 #define TYPEDEF 283 #define UNION 284 #define UNSIGNED 285 #define VOLATILE 286 #define WHILE 287 //运算符
#define PLUS 288 // #define MINUS 289 // #define MUL 290 #define DIV 291 // #define REMAIN 292 // #define GREATER 293
+
-
// * / % // >
第2页 共23页
#define LESS 294 // < #define EQUAL 295 // = #define MISTAKE 296 // ! #define AND 297 // & #define OR 298 // | #define PP 299 // ++ #define MM 300 // -- #define EE 301 // == #define GE 302 // >= #define LE 303 // <= #define MISE 304 // != #define AA 305 // && #define OO 306 // || #define PE 307 // += #define MINUSE 308 // -= #define MULE 309 // *= #define DIVE 310 // /= #define POW 311 // ^ // 界符
#define SEMIC 312 // ; #define COMMA 313 // , #define MULANNO_L 314 // /* #define MULANNO_R 315 // */ #define BRACE_L 316 // { #define BRACE_R 317 // } #define BRAKET_L 318 // ( #define BRAKET_R 319 // ) #define MIDBRA_L 320 // [ #define MIDBRA_R 321 // ] #define ONE_ANNO 322 // // //标识符和常量符 #define TAG 400 #define CONINT 401 #define CONFLOAT 402 #define CONCHAR 403 #define CONSTRING 404 //转义字符和字符串 #define CA 500 #define CB 501 #define CF 502 #define CN 503 #define CR 504 #define CT 505 #define CV 506 #define CBSL 507
第3页 共23页
#define CQUE 508 #define CDQM 509 #define CQM 510 #define ZERO 511 using namespace std;
typedef struct Variate{//变量标识符 int id;
char name[50]; }Variate;
typedef struct Constant{//常量 int id;
char name[50]; }Constant;
typedef struct Sign{ char name[100]; int sym; char attr[100]; }Sign;
const char *keywordTable[]={\ \ \ \ \作用是判断是否结束 const char *operateTable[]={\ \const char *borderTable[]={\const char changeList[12]={'a','b','f','n','r','t','v','\\\\','?','\ FILE *in; FILE *Out; FILE *Error; int line=1; //用于输出错误的行数或者其他情况。默认值是从 1 开始,为第一行 char buf[bufsize]; //存储读取的一行的字符串 char firchar; //头文件下第一个字符 char Char; int start=0;
int VariateNum=0;//记录变量的个数,减去1 int ConstantNum=0;//记录常量的个数 int SignNum=0;//记录标记的个数
int notation=1;//记录是否找到多行注释的另一半 */ ,默认值是1 即为有另一半 int isNotation=0;//判断是否是在注释行内 0 不是, 1 单行注释 2多行注释 bool last=false; int late=0; Variate var; Constant con; Sign sign;
第4页 共23页