博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
词法分析
阅读量:6034 次
发布时间:2019-06-20

本文共 2513 字,大约阅读时间需要 8 分钟。

 

  1 #include <stdio.h>

  2 #include <string.h>

  3

  4 char prog[100],token[8],ch;

  5 int syn,word,i,j,sum;

  6 char *rwtab[6]={"begin","if","then","while","do","end"};

  7

  8 void scaner(void);

  9

 10 main()

 11 {

 12     word=0;

 13     printf("\n 在下方输入你的字符串(按回车结束输入):\n");

 14

 15     do{

 16             scanf("%c",&ch);

 17             prog[word++]=ch;

 18     }while(ch!='\n');

 19

 20     word=0;

 21     do{

 22             scaner();

 23             switch(syn)

 24             {

 25                 case 11:

 26                     printf("( %-10d%5d )\n",sum,syn);

 27                 break;

 28

 29                 case -1:

 30                     printf("you have input a wrong string\n");

 31                     return 0;

 32                 break;

 33

 34                 default:

 35                 printf("( %-10s%5d )\n",token,syn);

 36                 break;

 37             }

 38         }while(syn!=0);

 39

 40  }

 41

 42 void scaner(void)

 43 {

 44     sum=0;

 45

 46     for(i=0;i<8;i++)

 47         token[i++]= NULL;

 48

 49         ch=prog[word++];

 50         i=0;

 51

 52     while((ch==' ')||(ch=='\n'))

 53         ch=prog[word++];

 54

 55     if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A')))

 56      {

 57         while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9')))

 58         {

 59             token[i++]=ch;

 60             ch=prog[word++];

 61         }

 62

 63         word--;

 64         syn=10;

 65

 66         for(j=0;j<6;j++)

 67         if(strcmp(token,rwtab[n])==0)

 68         {

 69             syn=j+1;

 70             break;

 71         }

 72      }

 73      else if((ch>='0')&&(ch<='9'))

 74      {

 75         while((ch>='0')&&(ch<='9'))

 76         {

 77             sum=sum*10+ch-'0';

 78             ch=prog[word++];

 79         }

 80         word--;

 81         syn=11;

 82     }

 83     else

 84     {

 85         switch(ch)

 86         {

 87         case '<':

 88             token[i++]=ch;

 89             ch=prog[word++];

 90             if(ch=='=')

 91             {

 92                 syn=21;

 93                 token[i++]=ch;

 94             }

 95             else

 96             {

 97                 syn=20;

 98                 word--;

 99             }

100         break;

101

102         case '>':

103             token[i++]=ch;

104             ch=prog[word++];

105             if(ch=='=')

106             {

107                 syn=24;

108                 token[i++]=ch;

109             }

110             else

111             {

112                 syn=23;

113                 word--;

114             }

115         break;

116

117         case '+':

118             syn=13;

119             token[i++]=ch;

120         break;

121

122         case '-':

123             syn=14;

124             token[i++]=ch;

125         break;

126

127         case '=':

128             syn=25;

129             token[i++]=ch;

130         break;

131

132         case '*':

133             syn=15;

134             token[i++]=ch;

135         break;

136

137         case '/':

138             syn=16;

139             token[i++]=ch;

140         break;

141

142         case '(':

143             syn=27;

144             token[i++]=ch;

145         break;

146

147         case ')':

148             syn=28;

149             token[i++]=ch;

150         break;

151

152         case '<>':

153             syn=22;

154             token[i++]=ch;

155         break;

156

157         case ';':

158             syn=26;

159             token[i++]=ch;

160         break;

161

162         case '#':

163             syn=0;

164             token[i++]=ch;

165         break;

166

167         case ':':

168             token[i++]=ch;

169             ch=prog[word++];

170             if(ch=='=')

171             {

172                 syn=18;

173                 token[i++]=ch;

174             }

175             else

176             {

177             syn=17;

178             token[i++]=ch;

179             }

180         break;

181

182         default:

183             syn=-1;

184         break;

185         }

186     }

187         token[i++]='\0';

188 }

转载于:https://www.cnblogs.com/qq412158152/p/5925321.html

你可能感兴趣的文章
每天一个linux命令【转】
查看>>
PYTHON——多进程:概念
查看>>
NSString+URLEncoding.h --使用Obj-C对数据等进行URLEncoding编码
查看>>
select默认样式修改
查看>>
线程池-线程池源码详解
查看>>
ztree实用教程
查看>>
证明整数为平方数
查看>>
Linux虚拟机中配置JDK环境变量
查看>>
linux基础(7)-IO重定向
查看>>
Unity 框架篇
查看>>
Mysql常用DDL命令
查看>>
推荐几款专门为Github党量身定做的Chrome插件
查看>>
黑盒测试和白盒测试
查看>>
粘包、丢包及TCP信息收发
查看>>
Unity之使用技巧记录
查看>>
[四] java虚拟机JVM编译器编译代码简介 字节码指令实例 代码到底编译成了什么形式...
查看>>
.NET连接数据库方式
查看>>
JavaScript对象系统的使用
查看>>
HyperSnap 6捕获的视频图片都是一片漆黑
查看>>
时间选择控件YearPicker(基于React,antd)
查看>>