#include <stdio.h>#include<string.h>intN,P,ZBM;Charch,code[ +],str[ -];voidScaner ();voidMain () {printf ("Please input the source code:\n\n"); P=0; Do{ch=GetChar (); Code[p++]=ch; } while(ch!='#'); printf ("\n\noutput the code:\n\n"); P=0; Do{Scaner (); if(zbm==98) printf ("%s", str); Else if(zbm== About) printf ("<error,%s>", str); Elseprintf"<%d,%s>", ZBM,STR); } while(zbm!=0); printf ("\ n");}voidScaner () { Do{ch=code[p++]; } while(ch==' '); N=0; if((ch>='A'&&ch<='Z')|| (ch>='a'&&ch<='Z')|| ch=='_') { while((ch>='0'&&ch<='9')|| (ch>='A'&&ch<='Z')|| (ch>='a'&&ch<='Z')|| ch=='_') {Str[n++]=ch; CH=code[p++]; } str[n++]=' /'; if(strcmp (str,"begin")==0) zbm=1; Else if(strcmp (str,"if")==0) zbm=2; Else if(strcmp (str," Then")==0) zbm=3; Else if(strcmp (str," while")==0) zbm=4; Else if(strcmp (str," Do")==0) zbm=5; Else if(strcmp (str,"End")==0) zbm=6; Elsezbm=Ten; P--; } Else if(ch>='0'&&ch<='9') {ZBM= One; while((ch>='0'&&ch<='9')|| (ch>='A'&&ch<='Z')|| (ch>='a'&&ch<='Z')|| ch=='_') { if(ch<'0'|| Ch>'9') zbm= About; Str[n++]=ch; CH=code[p++]; } str[n++]=' /'; P--; } Else { Switch(CH) { Case '+': zbm= -; str[n++]=ch; Break; Case '-': zbm= -; str[n++]=ch; Break; Case '*': zbm= the; str[n++]=ch; Break; Case '/': zbm= -; str[n++]=ch; Break; Case ':': zbm= -; str[n++]=ch; if(code[p]=='=') {ZBM= -; str[n++]=ch;} Break; Case '<': zbm= -; str[n++]=ch; if(code[p]=='=') {ZBM= +; str[n++]=ch;} Break; if(code[p]=='>') {ZBM= A; str[n++]=ch;} Break; Case'>': zbm= at; str[n++]=ch; if(code[p]=='=') {ZBM= -; str[n++]=ch;} Break; Case '=': zbm= -; str[n++]=ch; Break; Case ';': zbm= -; str[n++]=ch; Break; Case '(': zbm= -; str[n++]=ch; Break; Case ')': zbm= -; str[n++]=ch; Break; Case '#': zbm=0; str[n++]=ch; Break; Case'\ n': zbm=98; str[n++]=ch; Break; Case'\ t': zbm=98; str[n++]=ch; Break; default: zbm= About; str[n++]=ch; } str[n++]=' /'; }}
1022 Lexical Analysis Program