#include <stdio.h>#include<string.h>Charprog[ -], token[ -];Charch;intsyn,p,m,n,sum;Char* rwtab[6]= {"begin","if"," Then"," while"," Do","End"};main () {p=0; printf ("\ n Please enter a string: \ n"); Do{ch=GetChar (); Prog[p++]=ch; } while(ch!='#'); P=0; Do{Scaner (); Switch(SYN) { Case One: printf ("\ n (%d,%d)", syn,sum); Break; Case-1: printf ("\ n (%s, error!)", token); Break; default: printf ("\ n (%d,%s)", SYN, token); } } while(syn!=0); printf ("\ nthe analysis succeeded \ n"); P=0; Scaner (); E (); if(syn==0) printf ("\ n There is no error. \ n"); Elseprintf"\ nthe error occurred. \ n"); }scaner () { for(n=0;n< -; n++) token[n]=NULL; M=0; Sum=0; CH=prog[p++]; while(ch==' ') {ch=prog[p++];} if(ch>='a'&& ch<='Z') { while(ch>='a'&& ch<='Z'|| ch>='0'&& ch<='9') {token[m++]=ch; CH=prog[p++]; } SYN=Ten;p--; 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++];} Syn= One;p--; } 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 '>': m=0; token[m++]=ch; CH=prog[p++]; if(ch=='=') {syn= -; token[m++]=ch;} Else{syn= at;p--;} Break; Case ':': m=0; token[m++]=ch; CH=prog[p++]; if(ch=='=') {syn= -; token[m++]=ch;} Else{syn= -;p--;} Break; Case '+': syn= -; token[0]=ch; Break; Case '-': syn= -; token[0]=ch; Break; Case '*': syn= the; token[0]=ch; Break; Case '/': syn= -; token[0]=ch; Break; Case '=': syn= -; token[0]=ch; Break; Case ';': syn= -; token[0]=ch; Break; Case '(': syn= -; token[0]=ch; Break; Case ')': syn= -; token[0]=ch; Break; Case '#': syn=0; token[0]=ch; Break; default: syn=-1; token[0]=ch; }}e () {printf ("E"); T (); E1 (); }e1 () {printf ("E1"); if(syn== -) {Scaner (); T (); E1 (); } Else { if(syn!= -&& syn!=0) error (); }} T () {printf ("T"); F (); T1 ();} T1 () {printf ("T1"); if(syn== the) {Scaner (); F (); T1 (); } Else { if(syn!= -&& syn!=0&& syn!= -) error (); }}f () {printf ("F"); if(syn== -) {Scaner (); E (); if(syn== -) Scaner (); Elseerror (); } Else if(syn== One|| syn==Ten) Scaner (); }error () {printf ("\ n (%d,%s) wrong place! \ n", SYN, token);}
C-Language parsing parser