词法分析

 

  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 }

posted @ 2016-10-01 01:02  233覃伟业  阅读(180)  评论(0编辑  收藏  举报