编译原理 词法分析程序

来源:互联网 发布:导航触摸屏校正软件 编辑:程序博客网 时间:2024/05/29 18:47
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <ctype.h>#define KEYWORD_NUM 9typedef struct {int code;char* value[20];} Tuple;const char keyword[KEYWORD_NUM][20] = { "if", "else", "int", "for", "while", "do", "return", "break", "continue" };bool is_keyword(char* str){for (int i = 0; i < KEYWORD_NUM; i++){if (strcmp(keyword[i], str) == 0){return true;}}return false;}int main(){// char filename[20];// printf("Input A Filename: ");// scanf("%s", filename);FILE* fp = fopen("Code.txt", "r");if (fp == NULL){printf("Open File Error\n");exit(0);}char buffer[20];int cursor = 0;char c;Tuple tuples[100];int num = 0;while (!feof(fp)){c = fgetc(fp);if (isalpha(c)){buffer[cursor++] = c;c = fgetc(fp);while (isalpha(c) || isdigit(c)){buffer[cursor++] = c;c = fgetc(fp);}buffer[cursor] = '\0';cursor = 0;fseek(fp, -1, SEEK_CUR);if (is_keyword(buffer)){tuples[num].code = 1;strcpy((char*)tuples[num++].value, buffer);}else{tuples[num].code = 2;strcpy((char*)tuples[num++].value, buffer);}}else if (isdigit(c)){buffer[cursor++] = c;c = fgetc(fp);while (isdigit(c)){buffer[cursor++] = c;c = fgetc(fp);}buffer[cursor] = '\0';cursor = 0;fseek(fp, -1, SEEK_CUR);tuples[num].code = 3;strcpy((char*)tuples[num++].value, buffer);}else if (c == '='){buffer[cursor++] = c;c = fgetc(fp);if (c == '='){buffer[cursor++] = c;}else{fseek(fp, -1, SEEK_CUR);}buffer[cursor] = '\0';cursor = 0;tuples[num].code = 4;strcpy((char*)tuples[num++].value, buffer);}else if (c == '+'){buffer[cursor++] = c;buffer[cursor] = '\0';cursor = 0;tuples[num].code = 4;strcpy((char*)tuples[num++].value, buffer);}else if (c == '-'){buffer[cursor++] = c;buffer[cursor] = '\0';cursor = 0;tuples[num].code = 4;strcpy((char*)tuples[num++].value, buffer);}else if (c == '*'){buffer[cursor++] = c;c = fgetc(fp);if (c == '*'){buffer[cursor++] = c;}else{fseek(fp, -1, SEEK_CUR);}buffer[cursor] = '\0';cursor = 0;tuples[num].code = 4;strcpy((char*)tuples[num++].value, buffer);}else if (c == '/'){buffer[cursor++] = c;buffer[cursor] = '\0';cursor = 0;tuples[num].code = 4;strcpy((char*)tuples[num++].value, buffer);}else if (c == '>'){buffer[cursor++] = c;c = fgetc(fp);if (c == '='){buffer[cursor++] = c;}else{fseek(fp, -1, SEEK_CUR);}buffer[cursor] = '\0';cursor = 0;tuples[num].code = 4;strcpy((char*)tuples[num++].value, buffer);}else if (c == '<'){buffer[cursor++] = c;c = fgetc(fp);if (c == '='){buffer[cursor++] = c;}else{fseek(fp, -1, SEEK_CUR);}buffer[cursor] = '\0';cursor = 0;tuples[num].code = 4;strcpy((char*)tuples[num++].value, buffer);}else if (c == ','){buffer[cursor++] = c;buffer[cursor] = '\0';cursor = 0;tuples[num].code = 5;strcpy((char*)tuples[num++].value, buffer);}else if (c == '('){buffer[cursor++] = c;buffer[cursor] = '\0';cursor = 0;tuples[num].code = 5;strcpy((char*)tuples[num++].value, buffer);}else if (c == ')'){buffer[cursor++] = c;buffer[cursor] = '\0';cursor = 0;tuples[num].code = 5;strcpy((char*)tuples[num++].value, buffer);}// printf("%c", c);}for (int i = 0; i < num; i++){printf("< %d, %s >\n", tuples[i].code, tuples[i].value);}fclose(fp);fp = fopen("middle_code.txt", "w");for (i = 0; i < num; i++){fprintf(fp, "<%d, %s>\n", tuples[i].code, tuples[i].value);}fclose(fp);return 0;}

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 奥马和园 郑州奥马和园 马栏山文化创意产业园 安染顾天骏全文免费阅读 安染和顾天骏完整章节目录 中高层领导力培训 企业中高层培训课程 中高年夫妇 武汉中高端装修公司 中高年夫妇在线播放 五六十岁中高年夫妇全集在线 成都到资中高铁时刻表 龙川一中高中部 中高艺大图 中高艺全集图片 中高艺模特judy 中高艺auly原版高清 成艺 儿女初长成中爸爸第一个尝鲜 图们中鲜宾馆 富明正博赛鸽中口 宁夏中卫中赛鸽公棚 鸽群中的猫 鸽是个什么梗网络用语中 中鸽拍卖网 中鸽网app 鸽鸽辣条 中鸽网空距计算器 重庆塞鸽网 天津信鸽网 全球信鸽网 陕西信鸽网 宁夏信鸽网 海霸王信鸽网 上工信鸽网 轩辕信鸽网 信鸽交易网 信鸽足环网 信息信鸽网 新疆信鸽网新疆赛鸽网 鸽业大全