#include <stdio.h>#include<string.h>#include<conio.h>#include<ctype.h>Charprog[ the],token[8],ch;intp,syn,m,n,sum;Char*rwtab[6]={"begin","if"," Then"," while"," Do","End"}; Scaner () {sum=0; for(m=0;m<8; m++) Token[m]=' /'; Ch=prog[p++]; M=0; while((ch==' ')|| (ch=='\ n')) Ch=prog[p++]; if(((ch<='Z') && (ch>='a'))|| ((ch<='Z') && (ch>='A'))) { while(((ch<='Z') && (ch>='a'))|| ((ch<='Z') && (ch>='A'))|| ((ch>='0') && (ch<='9')) {token[m++]=ch; Ch=prog[p++]; } P--; SYN=Ten; for(n=0;n<6; n++) if(strcmp (token,rwtab[n]) = =0) {syn=n+1; Break; } } Else if((ch>='0') && (ch<='9')) { while((ch>='0') && (ch<='9') ) {sum=sum*Ten+ch-'0'; Ch=prog[p++]; } P--; SYN= One; } Else Switch(CH) { Case '<': token[m++]=ch; CH=prog[p++]; if(ch=='=') {syn= +; Token[m++]=ch;} Else if(ch=='>') {syn= A; Token[m++]=ch;} Else{syn= -; P--; } Break; Case '>': token[m++]=ch; CH=prog[p++]; if(ch=='=') {syn= -; Token[m++]=ch;} Else{syn= at; P--; } Break; Case '+': syn= -; Token[m++]=ch; Break; Case '-': syn= -; Token[m++]=ch; Break; Case '*': syn= the; Token[m++]=ch; Break; Case '/': syn= -; Token[m++]=ch; Break; Case ':': token[m++]=ch; CH=prog[p++]; if(ch=='=') {syn= -; Token[m++]=ch;} Else{syn= -; P--; } Break; Case '=': syn= -; Token[m++]=ch; Break; Case '(': syn= -; Token[m++]=ch; Break; Case ')': syn= -; Token[m++]=ch; Break; Case ';': syn= -; Token[m++]=ch; Break; Case '#': syn=0; Token[m++]=ch; Break; default: syn=-1; Break; } Token[m++]=' /'; } Main () {p=0; printf ("\nplease input A string (end with #): \ n"); Do{scanf ("%c",&ch); Prog[p++]=ch;} while(ch!='#'); P=0; Do{Scaner (); Switch(SYN) { Case One:p rintf ("(%-10d%5d) \ n", Sum,syn); Break; Case-1:p rintf ("You have input a wrong string\n"); Getch (); Break; default: printf ("(%-10s%5d) \ n", Token,syn); Break; } } while(syn!=0); Getch (); }
0916 Programming Experiment a lexical analysis program