201406114257 张俊毅 词法分析

修改了几次 最后找到方法改进 但最后在数字的处理还没修改好 例如:111 会出现(111,11)(11,11)(1,11) 还有最后一定要以#号结束

因为后来才想到 改的位置比较大 有些地方还没处理好

#include<stdio.h>
find(char a[],int i);
find2(char a[],int i);
find3(char a[],int i);
main()
{
 int i=0;
 char a[100];
 gets(a);
 while (a[i]!=‘#‘&&i<=100)
 {
  if (a[i]==‘b‘||a[i]==‘i‘||a[i]==‘t‘||a[i]==‘w‘||a[i]==‘d‘||a[i]==‘e‘)
  {
  i=find(a,i);
  i++;
  }
  else
  {
   find3(a,i);
   i++;
  }
 }
 printf("\n");
}
find(char a[],int i)
{
 switch (a[i])
 {
 case ‘b‘:
  if (a[i+1]==‘e‘&&a[i+2]==‘g‘&&a[i+3]==‘i‘&&a[i+4]==‘n‘)
  {
   printf("(begin,1)");
   i=i+4;return i;
  }
  else
  {i=find2(a,i);
  return i;
  }
 case ‘i‘:
  if (a[i+1]==‘f‘)
  {
   printf("(if,2)");
   i=i+1;
   return i;
  }
  else
  {i=find2(a,i);
  return i;
  }
 case ‘t‘:
  if (a[i+1]==‘h‘&&a[i+2]==‘e‘&&a[i+3]==‘n‘)
  {
   printf("(then,3)");
   i=i+3;
   return i;
  }
  else
  {i=find2(a,i);
  return i;
  }
 case ‘w‘:
  if (a[i+1]==‘h‘&&a[i+2]==‘i‘&&a[i+3]==‘l‘&&a[i+4]==‘e‘)
  {
   printf("(while,4)");
   i=i+4;
   return i;
  }
  else
  {i=find2(a,i);
  return i;
  }
 case ‘d‘:
  if (a[i+1]==‘o‘)
  {
   printf("(do,5)");
   i=i+1;
   return i;
  }
  else
  {i=find2(a,i);
  return i;
  }
 case ‘e‘:
  if (a[i+1]==‘n‘&&a[i+2]==‘d‘)
  {
   printf("(end,6)");
   i=i+2;
   return i;
  }
  else
  {i=find2(a,i);
  return i;
  }
 
 default:
  return i;
 }
}
find2(char a[],int i)
{
 printf("(");
 for (i;a[i]!=‘ ‘;i++)
   {
    printf("%c",a[i]);
   }
 printf(",10)");
  return i;
}
find3(char a[],int i)
{
 switch(a[i])
 {
    case ‘+‘:
  printf("(+,13)");
  break;
 case ‘-‘:
  printf("(-,14)");
  break;
 case ‘*‘:
  printf("(*,15)");
  break;
 case ‘/‘:
  printf("(/,16)");
  break;
 case ‘:‘:
  if (a[i+1]==‘=‘)
  {
   printf("(:=,18)");
  }
  else
  {
   printf("(:,17)");
  }
  break;
 case ‘<‘:
  if (a[i+1]==‘=‘)
  {
   printf("(<=,21)");
  }
  else if(a[i+1]==‘>‘)
  {
   printf("(<>,22)");
  }
  else
  {
   printf("(<,20)");
  }
  break;
 case ‘>‘:
  if (a[i+1]==‘=‘)
  {
   printf("(>=,24)");
  }
  else
  {
   printf("(>,23)");
  }
  break;
 case ‘=‘:
  printf("(=,25)");
  break;
 case ‘;‘:
  printf("(;,26)");
  break;
 case ‘(‘:
  printf("((,27)");
  break;
 case ‘)‘:
  printf("(),28)");
  break;
 case ‘1‘:case ‘2‘:case ‘3‘:case ‘4‘:case ‘5‘:case ‘6‘:case ‘7‘:case ‘8‘:case ‘9‘:case ‘0‘:
  printf("(");
  for (i;;i++)
  {
   if (a[i]==‘1‘||a[i]==‘2‘||a[i]==‘3‘||a[i]==‘4‘||a[i]==‘5‘||a[i]==‘6‘||a[i]==‘7‘||a[i]==‘8‘||a[i]==‘9‘||a[i]==‘0‘)
   {
    printf("%c",a[i]);
   }
   else
   {
    printf(",11)");
    return i;
   }
  }
 default:
  return i;
 }
 return i;
}

时间: 2024-10-18 17:30:27

201406114257 张俊毅 词法分析的相关文章

java 版的复利计算器(张俊毅 周修文)

(带有本金的选项卡的意思就是计算你在知道利率.年限和本息的情况下计算本金) 在利率的输入中能限制小数点的输入并且输入字母会被直接去除 每一个选项卡都有复利和单利的计算,并且在你计算之后会立即更新在下面的表格中 表格用了JBable 而滚动条用了JScrollPane 代码我只用了一个类来写 所以就不放上来了 上传到github

14级商软2班软件工程大作业分组定题

------------------------------------------------------------------------------ 1         索马里青年党 201406114244 林集团 http://www.cnblogs.com/linjituan/     https://github.com/LinJiTuan 201406114241 周修文 http://www.cnblogs.com/wsstzxwx/     https://github.c

何首乌第一次冲刺总结

团队名:何首乌 项目确定:<点餐系统> 项目背景:这次点餐系统是为了餐厅开发的点餐系统,为的是方便客人到店里可以直接下单,因为在平常的时候都是服务员来为客人写菜单,客人有时候会想的比较久,而然服务员却不能直接离开去做别的服务(这不太礼貌~).所以这款APP就为了方便客人以及餐厅,想点多久就点多久,不需要服务人等候点餐从而增加劳动效果~ 项目分工: 1.产品负责人:胡铭恩,主要负责构思产品的功能,开发的内容. 2.项目经理:梁毅乾,领导,监督,带领团队完成工作. 3.用户体验:周修文,陈楷淇,我

第二次冲刺总结

团队名:何首乌 项目确定:<点餐系统> 项目背景:这次点餐系统是为了餐厅开发的点餐系统,为的是方便客人到店里可以直接下单,因为在平常的时候都是服务员来为客人写菜单,客人有时候会想的比较久,而然服务员却不能直接离开去做别的服务(这不太礼貌~).所以这款APP就为了方便客人以及餐厅,想点多久就点多久,不需要服务人等候点餐从而增加劳动效果~ 项目分工: 1.产品负责人:胡铭恩,主要负责构思产品的功能,开发的内容. 2.项目经理:梁毅乾,领导,监督,带领团队完成工作. 3.用户体验:周修文,陈楷淇,我

词法分析实验报告

词法分析实验报告 一.        实验目的 编制一个词法分析器,通过该词法分析程序的设计实例,进一步了解词法分析程序构造的一些细节. 二.        实验内容和要求 实验内容: 对字符串表示的源程序,从左到右进行扫描和分解.根据词法规则,识别出一个一个具有独立意义的单词符号,以供语法分析之用,若发现词法错误,则返回出错信息. 实验要求: 输入:源程序字符串 输出:二元组(种别,单词本身) 待分析语言的词法规则 三. 实验方法.步骤及结果测试 源程序名:压缩包文件(rar或zip)中源程序

词法分析

词法分析 #include<stdio.h> #include<string.h> void main() { int i=0,j,k=0,state=1,f=0,linenum=1; char a[11][10]={"const","var","call","begin","if","while","do","odd",&

实验报告-词法分析.c

实验一.词法分析程序 商业软件工程   简梓茵  201506110132 一.        实验目的   熟悉词法分析的形式. 二.        实验内容和要求 对输入的每个关键字或者字符进行词法分析,给出该关键字对应的排序序号 三.        实验方法.步骤及结果测试   1.      源程序名:wordanalyse.c 2.      原理分析及流程图 3.      主要程序段及其解释: #include <stdio.h> #include <string.h>

实验一词法分析程序

一.        实验目的 编制一个词法分析程序 二.        实验内容和要求 输入:源程序字符串 输出:二元组(种别,单词本身) 待分析语言的词法规则 三.        实验方法.步骤及结果测试 1.      源程序名:压缩包文件(rar或zip)中源程序名 cifafenxi.c  cifafenxi.exe 2.      原理分析及流程图 3.      主要程序段及其解释: do { scanf("%s\n",input); i=0; while(input[i]

词法分析程序实验报告

实验一词法分析实验 商业软件工程2班  黄铭坤  201506110147 一.        实验目的        编制一个词法分析程序. 二.        实验内容和要求 输入:源程序字符串 输出:二元组(种别,单词本身) 待分析语言的词法规则 三.        实验方法.步骤及结果测试 1.      源程序名:词法分析.c 可执行程序名:词法分析.exe 2.      原理分析及流程图 (1)   关键字: begin  if  then  while  do  end (2)