一个词法分析程序

  1 #include <stdio.h>
  2 #include <string.h>
  3 #include<conio.h>
  4 #include <process.h>
  5 char prog[80],token[8],ch;
  6 int syn,p,m,n,sum;
  7 char *rwtab[6]={"begin","if","then","while","do","end"};
  8  scaner();
  9 main()
 10 {p=0;
 11  printf("\n please input a string(end with ‘#‘):/n");
 12  do{
 13     scanf("%c",&ch);
 14     prog[p++]=ch;
 15     }while(ch!=‘#‘);
 16  p=0;
 17  do{
 18     scaner();
 19     switch(syn)
 20      {case 11:printf("( %-10d%5d )\n",sum,syn);
 21           break;
 22       case -1:printf("you have input a wrong string\n");
 23           getch();
 24           exit(0);
 25       default: printf("( %-10s%5d )\n",token,syn);
 26           break;
 27       }
 28     }while(syn!=0);
 29     getch();
 30  }
 31
 32  scaner()
 33  {  sum=0;
 34     for(m=0;m<8;m++)token[m++]=NULL;
 35     ch=prog[p++];
 36     m=0;
 37     while((ch==‘ ‘)||(ch==‘\n‘))ch=prog[p++];
 38     if(((ch<=‘z‘)&&(ch>=‘a‘))||((ch<=‘Z‘)&&(ch>=‘A‘)))
 39       { while(((ch<=‘z‘)&&(ch>=‘a‘))||((ch<=‘Z‘)&&(ch>=‘A‘))||((ch>=‘0‘)&&(ch<=‘9‘)))
 40       {token[m++]=ch;
 41        ch=prog[p++];
 42       }
 43       p--;
 44       syn=10;
 45       for(n=0;n<6;n++)
 46     if(strcmp(token,rwtab[n])==0)
 47        { syn=n+1;
 48          break;
 49        }
 50       }
 51     else if((ch>=‘0‘)&&(ch<=‘9‘))
 52       { while((ch>=‘0‘)&&(ch<=‘9‘))
 53     { sum=sum*10+ch-‘0‘;
 54       ch=prog[p++];
 55     }
 56     p--;
 57     syn=11;
 58       }
 59     else switch(ch)
 60     { case ‘<‘:token[m++]=ch;
 61           ch=prog[p++];
 62            if(ch==‘=‘)
 63             {  syn=22;
 64                token[m++]=ch;
 65             }
 66           else
 67             {  syn=20;
 68                p--;
 69             }
 70           break;
 71      case ‘>‘:token[m++]=ch;
 72           ch=prog[p++];
 73           if(ch==‘=‘)
 74             { syn=24;
 75               token[m++]=ch;
 76             }
 77           else
 78             { syn=23;
 79               p--;
 80             }
 81           break;
 82      case ‘+‘: token[m++]=ch;
 83           ch=prog[p++];
 84           if(ch==‘+‘)
 85             { syn=17;
 86               token[m++]=ch;
 87             }
 88           else
 89             { syn=13;
 90               p--;
 91             }
 92           break;
 93
 94      case ‘-‘:token[m++]=ch;
 95           ch=prog[p++];
 96           if(ch==‘-‘)
 97             { syn=29;
 98               token[m++]=ch;
 99             }
100           else
101             { syn=14;
102               p--;
103             }
104           break;
105
106      case ‘!‘:ch=prog[p++];
107           if(ch==‘=‘)
108            { syn=21;
109              token[m++]=ch;
110            }
111           else
112           { syn=31;
113              p--;
114           }
115           break;
116
117      case ‘=‘:token[m++]=ch;
118           ch=prog[p++];
119           if(ch==‘=‘)
120             { syn=25;
121               token[m++]=ch;
122             }
123           else
124             { syn=18;
125               p--;
126             }
127           break;
128      case ‘*‘: syn=15;
129            token[m++]=ch;
130            break;
131      case ‘/‘: syn=16;
132            token[m++]=ch;
133            break;
134      case ‘(‘: syn=27;
135            token[m++]=ch;
136            break;
137      case ‘)‘: syn=28;
138            token[m++]=ch;
139            break;
140      case ‘{‘: syn=5;
141            token[m++]=ch;
142            break;
143      case ‘}‘: syn=6;
144            token[m++]=ch;
145            break;
146      case ‘;‘: syn=26;
147           token[m++]=ch;
148           break;
149      case ‘\"‘: syn=30;
150            token[m++]=ch;
151            break;
152      case ‘#‘: syn=0;
153            token[m++]=ch;
154            break;
155      case ‘:‘:syn=17;
156            token[m++]=ch;
157            break;
158     default: syn=-1;
159          break;
160        }
161     token[m++]=‘\0‘;
162     }
时间: 2024-10-03 14:24:03

一个词法分析程序的相关文章

实验一词法分析程序

一.        实验目的 编制一个词法分析程序 二.        实验内容和要求 输入:源程序字符串 输出:二元组(种别,单词本身) 待分析语言的词法规则 三.        实验方法.步骤及结果测试 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) 

实验报告一 词法分析程序

实验一.词法分析程序实验 专业:商业软件工程   姓名:卓润峰  学号:201506110202 一.        实验目的 编制一个词法分析程序. 二.        实验内容和要求 1.输入:源程序字符串. 2.输出:二元组(种别,单词本身) 3.待分析语言的词法规则 主要是从左至右逐个字符地对源程序进行扫描,产生一个个单词序列,用于语法分析 三.        实验方法.步骤及结果测试 1.     源程序名:压缩包文件(rar或zip)中源程序名 cifafenxi.c 可执行程序名:

实验一 词法分析程序实验

实验一.词法分析程序实验 商业软件工程   蓝海鹏  201506110171 一.        实验目的        编制一个词法分析程序. 二.        实验内容和要求 实验内容: 对字符串表示的源程序 从左到右进行扫描和分解 根据词法规则: 单词符号 种别码 单词符号 种别码 begin 1 : 17 if 2 := 18 then 3 < 20 while 4 <= 21 do 5 <> 22 end 6 > 23 l(l|d)*(标识符) 10 >=

实验一、词法分析程序

实验一.词法分析实验 专业:商业软件工程二班   姓名 :颜杰文 学号:201506110150 一. 实验目的        编制一个词法分析程序 二. 实验内容和要求 实验内容:1.对字符串表示的源程序 2.从左到右进行扫描和分解 3.根据词法规则 4.识别出一个一个具有独立意义的单词符号 5.以供语法分析之用 6.发现词法错误,则返回出错信息 实验要求:输入:源程序字符串 输出:二元组(种别,单词符号本身) 三. 实验方法.步骤及结果测试   源程序名: yjw.c 可执行程序名:yjw.

实验一、词法分析程序实验

实验一.词法分析实验 专业:商业软件工程3班   姓名:张德标  学号:201506110200 一.        实验目的 编制一个词法分析程序 二.        实验内容和要求 内容:对字符串表示的源程序,从左到右进行扫描和分解,根据词法规则,识别出一个一个具有独立意义的单词符号以供语法分析只用,发现语法错误,则返回出错信息 要求:输入源程序字符串,输出二元组(种别,单词符号本身) 三.        实验方法.步骤及结果测试  1.     源程序名 2.     原理分析及流程图 主

实验一&#160;&#160;词法分析程序045

实验一  词法分析程序实验 专业 计算机科学与技术   姓名 邹汉辉  学号 201508030045 一.实验目的 1. 编制一个词法分析程序 二. 实验内容和要求 1. 输入:源程序字符串 2. 输出:二元组(种别,单词本身) 3. 待分析语言的词法规则 三. 实验方法.步骤及结果测试 1.  源程序名:压缩包文件(rar或zip)中源程序名 cifafenxi.c 可执行程序名:cifafenxi.exe 2.  原理分析及流程图 3.  主要程序段及其解释: #include<stdio

词法分析程序 LEX和VC6整合使用的一个简单例子

词法分析的理论知识不少,包括了正规式.正规文法.它们之间的转换以及确定的有穷自动机和不确定的有穷自动机等等... 要自己写一个词法分析器也不会很难,只要给出了最简的有穷自动机,就能很方便实现了,用if.switch-case来写一通所谓的状态转换就可以,我近期会写一个简单的词法分析程序来作为例子... 现在已经有人发明了一个叫LEX的工具让你去应用,那我们就省了不少力气,毕竟没到万不得已的时候,我们都没必要重新发明轮子,从另一个角度来说,使用工具是我们人类知识继承的一种方法,也是我们比其他动物优

词法分析程序新

词法分析程序的功能:提示用户输入一段需分析的源程序,然后程序读入该源程序的字符串进行词法分析,最后输出词法分析的结果显示在屏幕上.符号与种别码对照表:单词符号 种别码 单词符号 种别码begin     1        :          17if           2        :=        18then      3        <          20while      4       <=        22do         5 end       6