½ñÌìÎÒÃÇÀ´¿´¿´±àÒëÔÀíÖеĵݹéϽµ·ÖÎö·¨£¬·Ñ»°¾Í²»¶à˵ÁË£¬Ö±½ÓÉÏ´úÂëÁË£º
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char prog[80],token ;
char ch;
int syn=-1,p,t;
void scanner£¨£©£»
void statement£¨£©£»
void expression_r£¨£©£»
void term£¨£©£»
void factor£¨£©£»
void getcha£¨£©
{
ch=prog[p++];
}
void getbc£¨£©
{
while£¨prog[p]==' '£©
p++;
getcha£¨£©£»
}
void concat£¨£©
{
token[t++]=ch;
}
bool letter£¨char ch£©
{
if£¨£¨ch>='a'&&ch<='z'£©||£¨ch>='A'&&ch<='Z'£©£©
return true;
return false;
}
bool digit£¨char ch£©
{
if£¨ch>='0'&&ch<='9'£©
return true;
return false;
}
int reserve£¨£©
{
token[t++]='\0';
if£¨strcmp£¨token,"begin"£©==0£© return 1;
if£¨strcmp£¨token,"end"£©==0£© return 6;
if£¨strcmp£¨token,"if"£©==0£© return 2;
if£¨strcmp£¨token,"then"£©==0£© return 3;
if£¨strcmp£¨token,"else"£©==0£© return 7;
if£¨strcmp£¨token,"while"£©==0£© return 4;
if£¨strcmp£¨token,"do"£©==0£© return 5;
return 10;
}
void retract£¨£©
{
p--;
}
int dtb£¨£©
{
token[t++]='\0';
int i=atoi£¨token£©£»
return i;
}
void Irparse£¨£©
{
scanner£¨£©£»
statement£¨£©£»
while£¨syn==26£©//;
{
scanner£¨£©£»
statement£¨£©£»
}
}
void statement£¨£©
{
if£¨syn==10£©
{
scanner£¨£©£»
if£¨syn==18£©
{
scanner£¨£©£»
expression_r£¨£©£»
}
else
{
printf£¨"Óï·¨·ÖÎö³ö´í£¡ Çë¼ì²é±í´ïʽÊÇ·ñº¬£º=\n"£©£»return ;
}
}
else
{
//printf£¨"Óï·¨·ÖÎö³ö´í£¡ Çë¼ì²éÓï¾äÊÇ·ñÕýÈ·\n"£©£»return 0;
}
}
void expression_r£¨£©
{
term£¨£©£»
while£¨syn==13||syn==14£©//+ -
{
scanner£¨£©£»
term£¨£©£»
}
}
void term£¨£©
{
factor£¨£©£»
while£¨syn==15||syn==16£©//* /
{
scanner£¨£©£»
factor£¨£©£»
}
}
void factor£¨£©
{
if£¨syn==10||syn==11£©
{
scanner£¨£©£»
}
else if£¨syn==27£©
{
scanner£¨£©£»
expression_r£¨£©£»
if£¨syn==28£©
{
scanner£¨£©£»
}
else {printf£¨"Óï·¨·ÖÎö³ö´í£¡ Çë¼ì²éÊÇ·ñȱÉÙ'£©'\n"£©£»return;}
}
else {printf£¨"Óï·¨·ÖÎö³ö´í£¡ Çë¼ì²éÊÇ·ñÊäÈë·Ç·¨×Ö·û\n"£©£»return;}
}