0916 编程实验一 词法分析程序
2015-10-21 13:46
267 查看
# include<stdio.h> # include<stdlib.h> # include<string.h>
int panduan(char tmp[]) { char b[6][10] = {"begin", "if", "then", "while", "do", "end", }; int k = 0;
while(k < 6) // 临时变量tmp 与 字符串b[k] 进行比较 { if(strcmp(tmp, b[k]) == 0) { printf("<%s, %d>\n", tmp, k+1); return 0; } k++; } printf("<%s, 10>\n", tmp);
return 0; }
void cifafenxi(char a[]) { int i = 0, j = 0; char tmp[10]; int flag = 0;
while(a[i] != '\0') { if(a[i] >= 'a' && a[i] <= 'z') // 判断标识符 { tmp[j] = a[i]; j++; while((a[i+1] >= 'a' && a[i+1] <= 'z') || (a[i+1] >= '0' && a[i+1] <= '9')) { i++; tmp[j] = a[i]; j++; } tmp[j] = '\0'; j = panduan(tmp); }
if(a[i] >= '0' && a[i] <= '9') // 判断数字 { tmp[j] = a[i]; j++; while(a[i+1] >= '0' && a[i+1] <= '9') { i++; tmp[j] = a[i]; j++; } tmp[j] = '\0'; printf("<%s, 11>\n", tmp); j = 0; }
switch(a[i]) // 判断符号 { case '+':printf("<+, 13>\n");break; case '-':printf("<-, 14>\n");break; case '*':printf("<*, 15>\n");break; case '/':printf("</, 16>\n");break; case ':': { if(a[i+1] == '=') printf("<:=, 18>\n"); else printf("<:, 17>\n"); }break; case '<': { if(a[i+1] == '=') printf("<<=, 21>\n"); else if(a[i+1] == '>') printf("<<>, 22>\n"); else printf("<<, 20>\n"); }break; case '>': { if(a[i+1] == '=') printf("<>=, 24>\n"); else printf("<>, 23>\n"); }break; case '=':printf("<=, 25>\n");break; case ';':printf("<;, 26>\n");break; case '(':printf("<(, 27>\n");break; case ')':printf("<), 28>\n");break; case '#':printf("<#, 0>\n");break; } i++; } }
int main(void) { char a[300];
printf("input : "); gets(a); cifafenxi(a);
return 0; }
int panduan(char tmp[]) { char b[6][10] = {"begin", "if", "then", "while", "do", "end", }; int k = 0;
while(k < 6) // 临时变量tmp 与 字符串b[k] 进行比较 { if(strcmp(tmp, b[k]) == 0) { printf("<%s, %d>\n", tmp, k+1); return 0; } k++; } printf("<%s, 10>\n", tmp);
return 0; }
void cifafenxi(char a[]) { int i = 0, j = 0; char tmp[10]; int flag = 0;
while(a[i] != '\0') { if(a[i] >= 'a' && a[i] <= 'z') // 判断标识符 { tmp[j] = a[i]; j++; while((a[i+1] >= 'a' && a[i+1] <= 'z') || (a[i+1] >= '0' && a[i+1] <= '9')) { i++; tmp[j] = a[i]; j++; } tmp[j] = '\0'; j = panduan(tmp); }
if(a[i] >= '0' && a[i] <= '9') // 判断数字 { tmp[j] = a[i]; j++; while(a[i+1] >= '0' && a[i+1] <= '9') { i++; tmp[j] = a[i]; j++; } tmp[j] = '\0'; printf("<%s, 11>\n", tmp); j = 0; }
switch(a[i]) // 判断符号 { case '+':printf("<+, 13>\n");break; case '-':printf("<-, 14>\n");break; case '*':printf("<*, 15>\n");break; case '/':printf("</, 16>\n");break; case ':': { if(a[i+1] == '=') printf("<:=, 18>\n"); else printf("<:, 17>\n"); }break; case '<': { if(a[i+1] == '=') printf("<<=, 21>\n"); else if(a[i+1] == '>') printf("<<>, 22>\n"); else printf("<<, 20>\n"); }break; case '>': { if(a[i+1] == '=') printf("<>=, 24>\n"); else printf("<>, 23>\n"); }break; case '=':printf("<=, 25>\n");break; case ';':printf("<;, 26>\n");break; case '(':printf("<(, 27>\n");break; case ')':printf("<), 28>\n");break; case '#':printf("<#, 0>\n");break; } i++; } }
int main(void) { char a[300];
printf("input : "); gets(a); cifafenxi(a);
return 0; }
相关文章推荐
- ASP.NET动态网站制作(15)-- SQL数据库(1)
- 我们曾经心碎的C#之 第一章.我的第一个C#程序
- selenium2+webdriver+java多层级frame切换的问题
- 关于一个通俗易懂的FFT的C语言实现教程
- Qt小技巧(1)
- Metasploit使用Hash直接登录Windows
- 南邮编程在线编程题十三:最大公约数
- PHP页面编码问题
- Qt中如何获取某个控件的指针地址
- what yield does in python?
- java 一步一脚印 流—文件的保存和读写
- Java构造和解析Json数据2
- Python面向对象详解
- 剑指offer学习--初级c++面试题
- Java中静态变量与静态方法的继承
- Java构造和解析Json数据
- JAVA中方法和变量在继承中的覆盖和隐藏
- Error exporting print... Java heap space
- 手机访问网页地址跳转手机站代码
- GDI+(C#)