www.pudn.com > compiler.rar > shixunView.cpp


// shixunView.cpp : implementation of the CShixunView class 
// 
 
#include "stdafx.h" 
#include "shixun.h" 
#include  
using namespace std; 
#include "stdio.h"	//定义Kernighan和Ritchie在Unix System V 中定义的标准和扩展的类型和宏。 
					//还定义标准I/O 预定义流:stdin,stdout和stderr,说明 I/O流子程序 
//#include "math.h"	//说明数学运算函数,还定了 HUGE VAL 宏, 说明了matherr和matherr子程序用到的特殊结构 
#include "string.h"	//说明一些串操作和内存操作函数 
//#include "malloc.h"	//定义动态链表所用到的函数库 
#include "stdlib.h" 
#include "shixunDoc.h" 
#include "shixunView.h" 
char temp2[30]; 
char temp20[30]; 
char temp5[30]; 
char temp6[30]; 
char temp7[30]; 
char temp8[30]; 
char temp9[30]; 
char temp10[30]; 
char temp11[30]; 
char temp12[30]; 
/*char temp13[30]; 
char temp14[30]; 
char temp15[30]; 
char temp16[30]; 
char temp17[30]; 
char temp18[30]; 
char temp19[30]; 
char temp20[30];*/ 
int k2=0; 
 
//using namespace std; 
vector v; 
#define NULL 0 
#define EOP -1 
char keyword[6][10]={{"real"},{"else"},{"main"},{"if"},{"char"},{"int"}};//标识符表  
 
CHARFORMAT yanse; 
 
//unsigned int flog=0;	//全局变量,可随便调用 
 
struct 		//保存结果二元式流的结构体 
{ 
	char *class0; 
	char value0[30]; 
} 
result[100]; 
 
struct 		//保存坐标的结构体 
{ 
	char value1[30]; 
	char value2[30]; 
} 
result1[100]; 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CShixunView 
 
IMPLEMENT_DYNCREATE(CShixunView, CFormView) 
 
BEGIN_MESSAGE_MAP(CShixunView, CFormView) 
	//{{AFX_MSG_MAP(CShixunView) 
	ON_BN_CLICKED(IDC_BUTTON_READ, OnButtonRead) 
	ON_BN_CLICKED(IDC_BUTTON_BAOCUN, OnButtonBaocun) 
	ON_BN_CLICKED(IDC_BUTTON_QINGLING, OnButtonQingling) 
	ON_BN_CLICKED(IDC_BUTTON_CIFA, OnButtonCifa) 
	ON_BN_CLICKED(IDC_BUTTON_TUICHU, OnButtonTuichu) 
	ON_BN_CLICKED(IDC_BUTTON_YUFA, OnButtonYufa) 
	ON_NOTIFY(NM_CLICK, IDC_RICHEDIT, OnClickRicheditResouce) 
	//}}AFX_MSG_MAP 
	// Standard printing commands 
	ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint) 
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint) 
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview) 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CShixunView construction/destruction 
 
CShixunView::CShixunView() 
	: CFormView(CShixunView::IDD) 
{ 
	//{{AFX_DATA_INIT(CShixunView) 
	m_jieguo = _T(""); 
	m_chucuo = _T(""); 
	m_resouce = _T(""); 
	//}}AFX_DATA_INIT 
	// TODO: add construction code here 
	ZeroMemory(&yanse, sizeof(CHARFORMAT));			 
	yanse.cbSize = sizeof(CHARFORMAT); 
//	InitRichEdit(); 
 
} 
 
CShixunView::~CShixunView() 
{ 
} 
 
void CShixunView::DoDataExchange(CDataExchange* pDX) 
{ 
	CFormView::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CShixunView) 
	DDX_Control(pDX, IDC_RICHEDIT_RESOUCE, m_a); 
	DDX_Control(pDX, IDC_BUTTON_YUYI, m_yuyi); 
	DDX_Control(pDX, IDC_BUTTON_YUFA, m_yufa); 
	DDX_Control(pDX, IDC_BUTTON_TUICHU, m_tuichu); 
	DDX_Control(pDX, IDC_BUTTON_READ, m_read); 
	DDX_Control(pDX, IDC_BUTTON_QINGLING, m_qingling); 
	DDX_Control(pDX, IDC_BUTTON_CIFA, m_cifa); 
	DDX_Control(pDX, IDC_BUTTON_BAOCUN, m_baocun); 
	DDX_Text(pDX, IDC_EDIT_JIEGUO, m_jieguo); 
	DDX_Text(pDX, IDC_EDIT_CHUCUO, m_chucuo); 
	DDX_Text(pDX, IDC_RICHEDIT_RESOUCE, m_resouce); 
	//}}AFX_DATA_MAP 
} 
 
BOOL CShixunView::PreCreateWindow(CREATESTRUCT& cs) 
{ 
	// TODO: Modify the Window class or styles here by modifying 
	//  the CREATESTRUCT cs 
 
	return CFormView::PreCreateWindow(cs); 
} 
 
void CShixunView::OnInitialUpdate() 
{ 
	CFormView::OnInitialUpdate(); 
	GetParentFrame()->RecalcLayout(); 
	ResizeParentToFit(); 
 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CShixunView printing 
 
BOOL CShixunView::OnPreparePrinting(CPrintInfo* pInfo) 
{ 
	// default preparation 
	return DoPreparePrinting(pInfo); 
} 
 
void CShixunView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) 
{ 
	// TODO: add extra initialization before printing 
} 
 
void CShixunView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) 
{ 
	// TODO: add cleanup after printing 
} 
 
void CShixunView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/) 
{ 
	// TODO: add customized printing code here 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CShixunView diagnostics 
 
#ifdef _DEBUG 
void CShixunView::AssertValid() const 
{ 
	CFormView::AssertValid(); 
} 
 
void CShixunView::Dump(CDumpContext& dc) const 
{ 
	CFormView::Dump(dc); 
} 
 
CShixunDoc* CShixunView::GetDocument() // non-debug version is inline 
{ 
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CShixunDoc))); 
	return (CShixunDoc*)m_pDocument; 
} 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CShixunView message handlers 
 
void CShixunView::OnButtonRead()  
{ 
	// TODO: Add your control notification handler code here 
	char ch; 
	FILE *fp; 
	m_resouce=_T(""); 
	//m_chucuo.Format("gg%d",12); 
	m_jieguo=_T(""); 
	UpdateData(FALSE); 
	CString strFilter = _T("TXT File (*.txt)|*.txt|BY File (*.by)|*.by|DOC File (*.doc)|*.doc|"); 
	CFileDialog dlgOpen(TRUE, NULL, NULL, OFN_PATHMUSTEXIST | OFN_HIDEREADONLY,  
		strFilter, this); 
	if (IDOK == dlgOpen.DoModal())  
	{ 
		filePath = dlgOpen.GetPathName(); 
		fp=fopen(filePath,"r"); 
	} 
	else 
	{ 
		fp=NULL; 
	} 
	if(fp==NULL) 
		AfxMessageBox("无法读取文件,请检查路径是否正确再重试"); 
	else 
	{ 
		m_resouce=_T(""); 
		ch=fgetc(fp); 
		while(ch!=EOF) 
		{ 
		 
			if(ch=='\n') 
			m_resouce+=_T("\r"); 
			m_resouce+=_T(ch); 
			//row++; 
			ch=fgetc(fp); 
		} 
		m_resouce+=_T("\r"); 
		UpdateData(FALSE); 
	} 
	//filePath.Close(); 
	if(m_resouce!=_T("")) 
	{ 
		m_baocun.EnableWindow(TRUE); 
		m_cifa.EnableWindow(TRUE); 
	} 
} 
 
void CShixunView::OnButtonBaocun()  
{ 
	// TODO: Add your control notification handler code here 
	FILE *fp; 
	int l; 
	UpdateData(TRUE); 
	if(m_resouce==_T("")) 
		AfxMessageBox("文件为空,无法保存!"); 
	else 
	{ 
		m_resouce.Replace("\r",""); 
		l=m_resouce.GetLength();	 
		if((fp=fopen("F:/text1.by","w+t"))!=NULL) 
		fwrite(m_resouce,sizeof(char),l,fp); 
		fclose(fp); 
		MessageBox("源文件保存成功!"); 
		 
		//this->OnButtonRead(); 
		 
	} 
} 
 
void CShixunView::OnButtonQingling()  
{ 
	// TODO: Add your control notification handler code here 
	m_resouce=_T(""); 
	//m_shezhi=_T(""); 
	m_jieguo=_T(""); 
	m_chucuo=_T(""); 
	UpdateData(FALSE); 
	m_baocun.EnableWindow(FALSE); 
	m_cifa.EnableWindow(FALSE); 
	m_yufa.EnableWindow(FALSE); 
	m_yuyi.EnableWindow(FALSE); 
} 
 
void CShixunView::OnButtonCifa()  
{ 
	// TODO: Add your control notification handler code here 
	int i=0,j=0,j1=0,add=0; 
	int k=0; 
	int c=0,d=0; 
	unsigned int row=1,line=1;	//记录行数,列数 
	char a[1000];        //保存源文件 
	char temp[30];      //临时存储数据数组 
	char A[1000]; 
	//char temp1[100]; 
	 
	strcpy(a,"\0"); 
	strcpy(temp,"\0"); 
	UpdateData(TRUE); 
	m_chucuo=_T(""); 
	m_jieguo=_T(""); 
	UpdateData(FALSE); 
	c=m_resouce.GetLength(); 
	while(c--) 
	{ 
		a[d]=m_resouce.GetAt(d); //将程序存放道a[]数组中 
		d++; 
	} 
	a[d]='\0';					 
	int b=0; 
	char R[300]; 
	char L[300]; 
	R[b]=row; 
	L[b]=line; 
 
	yanse.crTextColor = RGB(0,0,0);//设置颜色 
	//m_a.Setsel(0,-1); 
	//m_a.SetSelectionCharFormat(yanse); 
	while(a[i]!='\0') 
	{ 
		if(isalpha(a[i])) 
		{ 
			int m=0,n=0,q=0; 
			strcpy(temp,"\0"); 
			while(isalpha(a[i])||(isdigit(a[i]))) //isalpha()判断某字符是否是英文字母,是则返回非零值,否则返回零值。isdigit()判断一个字符是否为数字(0-9),是数字返回1,不是返回0; 
			{ 
				temp[m]=a[i]; 
				m++; 
				i++; 
			} 
			temp[m]='\0'; 
			if(m>=8)            //判断字符长度是否大于八,是则出错 
			{ 
				itoa(row,R,10); 
				itoa(line,L,10); 
				add++; 
				itoa(add,A,10); 
				m_chucuo+=_T(A); 
				m_chucuo+=_T(".位置:"); 
				m_chucuo+=_T("非法标识符"); 
				m_chucuo+=_T(temp); 
				m_chucuo+=_T("出现在第"); 
				m_chucuo+=_T(R); 
				m_chucuo+=_T("行,第"); 
				m_chucuo+=_T(L); 
				m_chucuo+=_T("列"); 
				m_chucuo+=_T(";\t"); 
				m_chucuo+=_T("//标识符字符长度不大于8!\r\n"); 
			} 
			while(strcmp(temp,keyword[n])!=0) //跟关键字匹配 
				{ 
					n++; 
					if(n>=6) 
						break; 
				} 
			if(n<6) 
			{ 
				result[j].class0="1"; 
				strcpy(result[j].value0,temp); 
				itoa(row,R,10); 
				itoa(line,L,10); 
				strcpy(result1[j1].value1,R); 
				strcpy(result1[j1].value2,L); 
				line+=m; 
			} 
			 
			else 
			{ 
				result[j].class0="2"; 
				strcpy(result[j].value0,temp); 
				itoa(row,R,10); 
				itoa(line,L,10); 
				strcpy(result1[j1].value1,R); 
				strcpy(result1[j1].value2,L); 
				line+=m; 
			} 
			j++; 
			j1++; 
		} 
		else 
		{ 
			if(isdigit(a[i])) 
			{ 
				if('1'<=a[i]&&a[i]<='9') 
				{ 
					i++;	 
					if(isdigit(a[i])||(a[i]=='.')) 
					{ 
						int h=0,z=0; 
						strcpy(temp,"\0"); 
 
						i=i-1; 
						while(isdigit(a[i])||(a[i]=='.')) 
						{ 
							temp[h]=a[i]; 
							h++; 
							i++; 
						} 
						temp[h]='\0'; 
						z=atoi(temp); 
						if(z>65535) 
						{ 
							itoa(row,R,10); 
							itoa(line,L,10); 
							add++; 
							itoa(add,A,10); 
							m_chucuo+=_T(A); 
							m_chucuo+=_T(".位置:"); 
							m_chucuo+=_T("非法常量"); 
							m_chucuo+=_T(temp); 
							m_chucuo+=_T("出现在第"); 
							m_chucuo+=_T(R); 
							m_chucuo+=_T("行,第"); 
							m_chucuo+=_T(L); 
							m_chucuo+=_T("列"); 
							m_chucuo+=_T(";\t"); 
							m_chucuo+=_T("//整数不能超过65535!\r\n"); 
						} 
						result[j].class0="3"; 
						strcpy(result[j].value0,temp); 
						j++; 
						itoa(row,R,10); 
						itoa(line,L,10); 
						strcpy(result1[j1].value1,R); 
						strcpy(result1[j1].value2,L); 
						line+=h; 
						j1++; 
					} 
					else if((a[i]==',')||(a[i]==';')||(a[i]=='+')||(a[i]=='-')||(a[i]=='*')||(a[i]=='/')) 
					{ 
						int s=0; 
						strcpy(temp,"\0"); 
						i=i-1; 
						temp[s]=a[i]; 
						i++; 
						s++; 
						temp[s]='\0'; 
						result[j].class0="3"; 
						strcpy(result[j].value0,temp); 
						j++; 
						itoa(row,R,10); 
						itoa(line,L,10); 
						strcpy(result1[j1].value1,R); 
						strcpy(result1[j1].value2,L); 
						line+=s; 
						j1++; 
					} 
					else 
					{ 
						int h=0,z=0; 
						strcpy(temp,"\0"); 
 
						i=i-1; 
						temp[h]=a[i]; 
						h++; 
						i++; 
						temp[h]='\0'; 
						result[j].class0="2"; 
						strcpy(result[j].value0,temp); 
						j++; 
						itoa(row,R,10); 
						itoa(line,L,10); 
						strcpy(result1[j1].value1,R); 
						strcpy(result1[j1].value2,L); 
						line+=h; 
						j1++; 
					} 
				 
				} 
				else if(a[i]=='0') 
				{ 
					i++; 
					 
					if(isdigit(a[i])) 
					{ 
						int h=0,z=0; 
						strcpy(temp,"\0"); 
						i=i-1; 
						temp[h]=a[i]; 
						h=1; 
						i=i+1; 
						while(isdigit(a[i])) 
						{ 
							temp[h]=a[i]; 
							h++; 
							i++; 
						} 
						temp[h]='\0'; 
						//temp[s]='\0'; 
						result[j].class0="8"; 
						strcpy(result[j].value0,temp); 
						j++; 
						itoa(row,R,10); 
						itoa(line,L,10); 
						strcpy(result1[j1].value1,R); 
						strcpy(result1[j1].value2,L); 
						line+=h; 
						j1++; 
						add++; 
						itoa(add,A,10); 
						m_chucuo+=_T(A); 
						m_chucuo+=_T(".位置:"); 
						m_chucuo+=_T("非法标识符"); 
						m_chucuo+=_T(temp); 
						m_chucuo+=_T("出现在第"); 
						m_chucuo+=_T(R); 
						m_chucuo+=_T("行,第"); 
						m_chucuo+=_T(L); 
						m_chucuo+=_T("列"); 
						m_chucuo+=_T(";\t"); 
						m_chucuo+=_T("//常量无法识别!\r\n"); 
					} 
					else if(a[i]=='.') 
					{ 
						int q=0,z=0; 
						strcpy(temp,"\0"); 
						i=i-1; 
						temp[q]=a[i]; 
						q=1; 
						i=i+1; 
						temp[q]=a[i]; 
						q=2; 
						i=i+1; 
						while(isdigit(a[i])) 
						{ 
							temp[q]=a[i]; 
							i++; 
							q++; 
						} 
						temp[q]='\0'; 
						result[j].class0="3"; 
						strcpy(result[j].value0,temp); 
						j++; 
						itoa(row,R,10); 
						itoa(line,L,10); 
						strcpy(result1[j1].value1,R); 
						strcpy(result1[j1].value2,L); 
						line+=q; 
						j1++; 
					} 
					else 
					{ 
						int h=0,z=0; 
						strcpy(temp,"\0"); 
 
						i=i-1; 
						temp[h]=a[i]; 
						h++; 
						i++; 
						temp[h]='\0'; 
						result[j].class0="3"; 
						strcpy(result[j].value0,temp); 
						j++; 
						itoa(row,R,10); 
						itoa(line,L,10); 
						strcpy(result1[j1].value1,R); 
						strcpy(result1[j1].value2,L); 
						line+=h; 
						j1++; 
					} 
					 
 
					 
				} 
 
			 
			} 
			else 
			{ 
				strcpy(temp,"\0"); 
				if(a[i]=='+') 
				{ 
					result[j].class0="4"; 
					strcpy(result[j].value0,"+");					 
					j++; 
					i++; 
					itoa(row,R,10); 
					itoa(line,L,10); 
					strcpy(result1[j1].value1,R); 
					strcpy(result1[j1].value2,L); 
					line+=1; 
					j1++; 
				} 
				else if(a[i]=='-') 
				{ 
					result[j].class0="4"; 
					strcpy(result[j].value0,"-"); 
					j++; 
					i++; 
					itoa(row,R,10); 
					itoa(line,L,10); 
					strcpy(result1[j1].value1,R); 
					strcpy(result1[j1].value2,L); 
					line+=1; 
					j1++; 
				} 
				else if(a[i]=='*') 
				{ 
					result[j].class0="4"; 
					strcpy(result[j].value0,"*"); 
					j++; 
					i++; 
					itoa(row,R,10); 
					itoa(line,L,10); 
					strcpy(result1[j1].value1,R); 
					strcpy(result1[j1].value2,L); 
					line+=1; 
					j1++; 
				} 
				else if(a[i]=='/') 
				{ 
					i++; 
					if(a[i]=='/') 
					{ 
						i++; 
						line+=2; 
						while(a[i]!=10&&a[i+1]!=NULL)i++; 
						if(a[i+1]!=NULL) 
						{ 
							row++; 
							line=1; 
						} 
					} 
					else if(a[i]=='*') 
					{ 
						i++; 
						line+=2; 
						 while(a[i]!=NULL) 
						 { 
							 if((a[i]=='*')&&(a[i+1]=='/')) 
							 { 
								 i+=2; 
								 line+=2; 
								 break; 
							 } 
							else if(a[i]==10) 
							 { 
								 row++; 
								 line=1; 
							 } 
							else if(a[i]==9) 
							{ 
								line+=8-(line%8)+1; 
								//i++; 
							} 
							else 
								line++; 
								i++; 
						 } 
					} 
					else 
					{ 
						i--; 
						result[j].class0="4"; 
						strcpy(result[j].value0,"/"); 
						j++; 
						i++; 
						itoa(row,R,10); 
						itoa(line,L,10); 
						strcpy(result1[j1].value1,R); 
						strcpy(result1[j1].value2,L); 
						line+=1; 
						j1++; 
						int h=0,z=0; 
						strcpy(temp,"\0"); 
						//i=i-1; 
						if(isalpha(a[i])) 
						{ 
							temp[h]=a[i]; 
							h++; 
							i++; 
							temp[h]='\0'; 
							result[j].class0="2"; 
							strcpy(result[j].value0,temp); 
							j++; 
							//i++; 
							itoa(row,R,10); 
							itoa(line,L,10); 
							strcpy(result1[j1].value1,R); 
							strcpy(result1[j1].value2,L); 
							line+=1; 
							j1++; 
						} 
						else if(isdigit(a[i])) 
						{ 
							while(isdigit(a[i])) 
							{ 
								temp[h]=a[i]; 
								h++; 
								i++; 
							} 
							temp[h]='\0'; 
							result[j].class0="3"; 
							strcpy(result[j].value0,temp); 
							j++; 
							//i++; 
							itoa(row,R,10); 
							itoa(line,L,10); 
							strcpy(result1[j1].value1,R); 
							strcpy(result1[j1].value2,L); 
							line+=1; 
							j1++; 
						} 
						else 
						{ 
							temp[h]=a[i]; 
							h++; 
							i++; 
							temp[h]='\0'; 
							result[j].class0="8"; 
							strcpy(result[j].value0,temp); 
							j++; 
							//i++; 
							itoa(row,R,10); 
							itoa(line,L,10); 
							strcpy(result1[j1].value1,R); 
							strcpy(result1[j1].value2,L); 
							line+=1; 
							j1++; 
						} 
						 
 
 
					} 
					 
				} 
				else if(a[i]==',') 
				{ 
					result[j].class0="5"; 
					strcpy(result[j].value0,","); 
					j++; 
					i++; 
					itoa(row,R,10); 
					itoa(line,L,10); 
					strcpy(result1[j1].value1,R); 
					strcpy(result1[j1].value2,L); 
					line+=1; 
					j1++; 
				} 
				else if(a[i]==';') 
				{ 
					result[j].class0="5"; 
					strcpy(result[j].value0,";"); 
					j++; 
					i++; 
					itoa(row,R,10); 
					itoa(line,L,10); 
					strcpy(result1[j1].value1,R); 
					strcpy(result1[j1].value2,L); 
					line+=1; 
					j1++; 
				} 
				else if(a[i]=='(') 
				{ 
					result[j].class0="5"; 
					strcpy(result[j].value0,"("); 
					j++; 
					i++; 
					itoa(row,R,10); 
					itoa(line,L,10); 
					strcpy(result1[j1].value1,R); 
					strcpy(result1[j1].value2,L); 
					line+=1; 
					j1++; 
				} 
				else if(a[i]==')') 
				{ 
					result[j].class0="5"; 
					strcpy(result[j].value0,")"); 
					j++; 
					i++; 
					itoa(row,R,10); 
					itoa(line,L,10); 
					strcpy(result1[j1].value1,R); 
					strcpy(result1[j1].value2,L); 
					line+=1; 
					j1++; 
				} 
				else if(a[i]=='.') 
				{ 
					result[j].class0="5"; 
					strcpy(result[j].value0,"."); 
					j++; 
					i++; 
					itoa(row,R,10); 
					itoa(line,L,10); 
					strcpy(result1[j1].value1,R); 
					strcpy(result1[j1].value2,L); 
					line+=1; 
					j1++; 
				} 
				else if(a[i]=='{') 
				{ 
					result[j].class0="5"; 
					strcpy(result[j].value0,"{"); 
					j++; 
					i++; 
					itoa(row,R,10); 
					itoa(line,L,10); 
					strcpy(result1[j1].value1,R); 
					strcpy(result1[j1].value2,L); 
					line+=1; 
					j1++; 
				} 
				else if(a[i]=='}') 
				{ 
					result[j].class0="5"; 
					strcpy(result[j].value0,"}"); 
					j++; 
					i++; 
					itoa(row,R,10); 
					itoa(line,L,10); 
					strcpy(result1[j1].value1,R); 
					strcpy(result1[j1].value2,L); 
					line+=1; 
					j1++; 
				} 
				else if(a[i]==':') 
				{ 
					i++; 
					if(a[i]=='=') 
					{ 
						result[j].class0="6"; 
						strcpy(result[j].value0,":="); 
						i++; 
						itoa(row,R,10); 
						itoa(line,L,10); 
						strcpy(result1[j1].value1,R); 
						strcpy(result1[j1].value2,L); 
						line+=2; 
						//j1++; 
					} 
					else 
					{ 
						result[j].class0="5"; 
						strcpy(result[j].value0 ,":"); 
						itoa(row,R,10); 
						itoa(line,L,10); 
						strcpy(result1[j1].value1,R); 
						strcpy(result1[j1].value2,L); 
						line+=1; 
						//j1++; 
					} 
					j++; 
					j1++; 
				} 
				else if(a[i]=='=') 
				{ 
					result[j].class0="6"; 
					strcpy(result[j].value0,"="); 
					j++; 
					i++; 
					itoa(row,R,10); 
					itoa(line,L,10); 
					strcpy(result1[j1].value1,R); 
					strcpy(result1[j1].value2,L); 
					line+=1; 
					j1++; 
				} 
				else if(a[i]=='>') 
				{ 
					i++; 
					if(a[i]=='=') 
					{ 
						result[j].class0="7"; 
						strcpy(result[j].value0,">="); 
						i++; 
						itoa(row,R,10); 
						itoa(line,L,10); 
						strcpy(result1[j1].value1,R); 
						strcpy(result1[j1].value2,L); 
						line+=2; 
						//j1++; 
					} 
					else 
					{ 
						result[j].class0="7"; 
						strcpy(result[j].value0,">"); 
						itoa(row,R,10); 
						itoa(line,L,10); 
						strcpy(result1[j1].value1,R); 
						strcpy(result1[j1].value2,L); 
						line+=1; 
						//j1++; 
					} 
					j++; 
					j1++; 
				} 
				else if(a[i]=='<') 
				{ 
					i++; 
					if(a[i]=='=') 
					{ 
						result[j].class0="7"; 
						strcpy(result[j].value0,"<="); 
						i++; 
						itoa(row,R,10); 
						itoa(line,L,10); 
						strcpy(result1[j1].value1,R); 
						strcpy(result1[j1].value2,L); 
						line+=2; 
						//j1++; 
					} 
					else 
					{ 
						result[j].class0="7"; 
						strcpy(result[j].value0,"<"); 
						itoa(row,R,10); 
						itoa(line,L,10); 
						strcpy(result1[j1].value1,R); 
						strcpy(result1[j1].value2,L); 
						line+=1; 
						//j1++; 
					} 
					j++; 
					j1++; 
				} 
				else if(a[i]=='!') 
				{ 
					i++; 
					if(a[i]=='=') 
					{ 
						result[j].class0="9"; 
						strcpy(result[j].value0,"!="); 
						i++; 
						itoa(row,R,10); 
						itoa(line,L,10); 
						strcpy(result1[j1].value1,R); 
						strcpy(result1[j1].value2,L); 
						line+=2; 
						//j1++; 
					} 
					else 
					{ 
						itoa(row,R,10); 
						itoa(line,L,10); 
						add++; 
						itoa(add,A,10); 
						m_chucuo+=_T(A); 
						m_chucuo+=_T(".位置:"); 
						m_chucuo+=_T("非法标识符"); 
						m_chucuo+=_T(a[i-1]); 
						m_chucuo+=_T("出现在第"); 
						m_chucuo+=_T(R); 
						m_chucuo+=_T("行,第"); 
						m_chucuo+=_T(L); 
						m_chucuo+=_T("列"); 
						m_chucuo+=_T(";\r\n"); 
						result[j].class0="8"; 
						strcpy(result[j].value0,"!"); 
						itoa(row,R,10); 
						itoa(line,L,10); 
						strcpy(result1[j1].value1,R); 
						strcpy(result1[j1].value2,L); 
						line+=1; 
						//j1++; 
					} 
					j++; 
					j1++; 
				} 
				else if(a[i]=='&') 
				{ 
					i++; 
					if(a[i]=='&') 
					{ 
						result[j].class0="9"; 
						strcpy(result[j].value0,"&&"); 
						i++; 
						itoa(row,R,10); 
						itoa(line,L,10); 
						strcpy(result1[j1].value1,R); 
						strcpy(result1[j1].value2,L); 
						line+=2; 
						//j1++; 
					} 
					else 
					{ 
						itoa(row,R,10); 
						itoa(line,L,10); 
						add++; 
						itoa(add,A,10); 
						m_chucuo+=_T(A); 
						m_chucuo+=_T(".位置:"); 
						m_chucuo+=_T("非法标识符"); 
						m_chucuo+=_T(a[i-1]); 
						m_chucuo+=_T("出现在第"); 
						m_chucuo+=_T(R); 
						m_chucuo+=_T("行,第"); 
						m_chucuo+=_T(L); 
						m_chucuo+=_T("列"); 
						m_chucuo+=_T(";\r\n"); 
						result[j].class0="8"; 
						strcpy(result[j].value0,"&"); 
						itoa(row,R,10); 
						itoa(line,L,10); 
						strcpy(result1[j1].value1,R); 
						strcpy(result1[j1].value2,L); 
						line+=1; 
						//j1++; 
					} 
					j++; 
					j1++; 
				} 
				else if(a[i]=='|') 
				{ 
					i++; 
					if(a[i]=='|') 
					{ 
						result[j].class0="9"; 
						strcpy(result[j].value0,"||"); 
						i++; 
						itoa(row,R,10); 
						itoa(line,L,10); 
						strcpy(result1[j1].value1,R); 
						strcpy(result1[j1].value2,L); 
						line+=2; 
						//j1++; 
					} 
					else 
					{ 
						itoa(row,R,10); 
						itoa(line,L,10); 
						add++; 
						itoa(add,A,10); 
						m_chucuo+=_T(A); 
						m_chucuo+=_T(".位置:"); 
						m_chucuo+=_T("非法标识符"); 
						m_chucuo+=_T(a[i-1]); 
						m_chucuo+=_T("出现在第"); 
						m_chucuo+=_T(R); 
						m_chucuo+=_T("行,第"); 
						m_chucuo+=_T(L); 
						m_chucuo+=_T("列"); 
						m_chucuo+=_T(";\r\n"); 
						result[j].class0="8"; 
						strcpy(result[j].value0,"|"); 
						itoa(row,R,10); 
						itoa(line,L,10); 
						strcpy(result1[j1].value1,R); 
						strcpy(result1[j1].value2,L); 
						line+=1; 
						//j1++; 
					} 
					j++; 
					j1++; 
				} 
				else if(a[i]==' ')//space 
				{ 
					i++; 
					line++; 
				} 
				else if(a[i]==10) 
				{ 
					i++; 
					//row++; 
					//line=1; 
				} 
				else if(a[i]=='\r'&&a[i]=='\n')//enter 
				{ 
					i++; 
					row++; 
					line=1; 
				} 
				else if(a[i]=='\r') 
				{ 
					i++; 
					row++; 
					line=1; 
				} 
				else if(a[i]=='\t') 
				{ 
					i++; 
					line+=8-(line%8)+1; 
				} 
				else 
				{ 
					itoa(row,R,10); 
					itoa(line,L,10); 
					add++; 
					itoa(add,A,10); 
					m_chucuo+=_T(A); 
					m_chucuo+=_T(".位置:"); 
					m_chucuo+=_T("非法标识符"); 
					m_chucuo+=_T(a[i]); 
					m_chucuo+=_T("出现在第"); 
					m_chucuo+=_T(R); 
					m_chucuo+=_T("行,第"); 
					m_chucuo+=_T(L); 
					m_chucuo+=_T("列"); 
					m_chucuo+=_T(";\r\n"); 
					line++; 
					i++; 
				} 
					//i++; 
			} 
 
		} 
		 
	UpdateData(FALSE); 
	} 
	m_jieguo+=_T("define 关键字		1\r\n"); 
	m_jieguo+=_T("define 变量		2\r\n"); 
	m_jieguo+=_T("define 常量		3\r\n"); 
	m_jieguo+=_T("define 算术运算符	4\r\n"); 
	m_jieguo+=_T("define 分隔符		5\r\n"); 
	m_jieguo+=_T("define 赋值运算符	6\r\n"); 
	m_jieguo+=_T("define 关系运算符	7\r\n"); 
	m_jieguo+=_T("define 逻辑运算符	9\r\n"); 
	m_jieguo+=_T("define 非法字符		8\r\n"); 
 
	for(k=0;k"); 
		m_jieguo+=_T("("); 
		m_jieguo+=_T(result1[k].value1); 
		m_jieguo+=_T(","); 
		m_jieguo+=_T(result1[k].value2); 
		m_jieguo+=_T("\t)\r\n"); 
	} 
	 
	//m_chucuo+=_T("aaaaaaaa"); 
	if(m_chucuo==_T("")) 
	{ 
		m_chucuo+=_T("词法分析成功,可继续进行语法分析!"); 
		m_yufa.EnableWindow(TRUE); 
 
	} 
	UpdateData(FALSE); 
 
	 
} 
bool CShixunView::isdigit(char ch) 
{ 
	if( '0' <= ch && ch<='9') 
	{   
		return true; 
	} 
	else 
	{ 
		return false; 
	} 
} 
 
bool CShixunView::isalpha(char ch) 
{ 
	if( ('A' <= ch && ch<='Z') || ('a' <= ch && ch<='z')) 
	{   
		return true; 
	} 
	else 
	{ 
		return false; 
	} 
} 
 
 
void CShixunView::OnButtonTuichu()  
{ 
	// TODO: Add your control notification handler code here 
//	CDialog::OnCancel(); 
	//EndDialog(IDC_BUTTON_TUICHU); 
	PostQuitMessage(0); 
} 
void CShixunView::OnClickRicheditResouce(NMHDR* pNMHDR, LRESULT* pResult)  
{ 
	// TODO: Add your control notification handler code here 
	*pResult = 0; 
} 
/*void CShixunView::shezhi() 
{ 
	int l=0; 
	while(result[l].class0==8) 
	{ 
		yanse.dwMask|=CFM_COLOR; 
		yanse.crTextColor = RGB(255,0,0);//设置颜色 
		m_resouce.SetSel(error1[e1],error1[e1]+error2[e1]); 
		m_resouce.SetSelectionCharFormat(yanse); 
		l++; 
	} 
	//error1[0]=-1; 
}*/ 
void CShixunView::OnButtonYufa()  
{ 
	// TODO: Add your control notification handler code here 
	UpdateData(TRUE); 
	m_chucuo=_T(""); 
	flog=0; 
	bb=0; 
	//strcpy(result[100].value0,"\0"); 
	UpdateData(FALSE); 
	m_chucuo+=_T("语法分析如下:\r\n"); 
	 
	if(chengxu()) 
	{ 
		m_chucuo+=_T("\t语法分析成功,可继续进行语义分析!\r\n"); 
        m_yuyi.EnableWindow(TRUE); 
	} 
	else 
	{ 
		m_chucuo+=_T("\t语法分析失败,具体错误如上面所示.\r\n"); 
	} 
	UpdateData(FALSE); 
 
} 
//<程序> → main(){分程序} 
bool CShixunView::chengxu(void) 
{ 
	if(!strcmp(result[flog].value0,"main")) 
	{ 
		flog++; 
		if(!strcmp(result[flog].value0,"(")&&(!strcmp(result1[flog-1].value1,result1[flog].value1))) 
		{ 
			flog++; 
			if(!strcmp(result[flog].value0,")")&&(!strcmp(result1[flog-1].value1,result1[flog].value1))) 
			{ 
				flog++; 
				if(!strcmp(result[flog].value0,"{"))/*&&(!strcmp(result1[flog-1].value1,result1[flog].value1-1)))*/ 
				{ 
					flog++; 
					if(fenchengxu()) 
					{ 
						flog++; 
						if(strcmp(result[flog].value0,"")) 
						{ 
							if(!strcmp(result[flog].value0,"}")) 
							{ 
								return 1; 
							} 
							else 
							{ 
								bb++; 
								itoa(bb,B,10); 
								m_chucuo+=_T(B); 
								m_chucuo+=_T(".语法出错的位置坐标为"); 
								m_chucuo+=_T("("); 
								m_chucuo+=_T(result1[flog-1].value1); 
								m_chucuo+=_T(","); 
								m_chucuo+=_T(result1[flog-1].value2); 
								m_chucuo+=_T("):"); 
								m_chucuo+=_T("产生式(<程序> → main(){分程序})中程序结尾缺少}!\r\n"); 
								return 0; 
							}						 
						} 
						else 
						{ 
							bb++; 
							itoa(bb,B,10); 
							m_chucuo+=_T(B); 
							m_chucuo+=_T(".语法出错的位置坐标为"); 
							m_chucuo+=_T("("); 
							m_chucuo+=_T(result1[flog-1].value1); 
							m_chucuo+=_T(","); 
							m_chucuo+=_T(result1[flog-1].value2); 
							m_chucuo+=_T("):"); 
							m_chucuo+=_T("产生式(<程序> → main(){分程序})中程序结尾缺少}!\r\n"); 
							return 0; 
						} 
						 
					} 
					else//分程序出错 
					{ 
						flog++; 
						if(strcmp(result[flog].value0,"")) 
						{ 
							if(strcmp(result[flog].value0,"}")) 
							{ 
								bb++; 
								itoa(bb,B,10); 
								m_chucuo+=_T(B); 
								m_chucuo+=_T(".语法出错的位置坐标为"); 
								m_chucuo+=_T("("); 
								m_chucuo+=_T(result1[flog-1].value1); 
								m_chucuo+=_T(","); 
								m_chucuo+=_T(result1[flog-1].value2); 
								m_chucuo+=_T("):"); 
								m_chucuo+=_T("产生式(<程序> → main(){分程序})中缺少}!\r\n"); 
							} 
						} 
						else 
						{ 
							bb++; 
							itoa(bb,B,10); 
							m_chucuo+=_T(B); 
							m_chucuo+=_T(".语法出错的位置坐标为"); 
							m_chucuo+=_T("("); 
							m_chucuo+=_T(result1[flog-1].value1); 
							m_chucuo+=_T(","); 
							m_chucuo+=_T(result1[flog-1].value2); 
							m_chucuo+=_T("):"); 
							m_chucuo+=_T("文件末尾缺少}!\r\n"); 
						} 
						 
						return 0; 
					}					 
				} 
				else//缺少{ 
				{ 
					bb++; 
					itoa(bb,B,10); 
					m_chucuo+=_T(B); 
					m_chucuo+=_T(".语法出错的位置坐标为"); 
					m_chucuo+=_T("("); 
					m_chucuo+=_T(result1[flog-1].value1); 
					m_chucuo+=_T(","); 
					m_chucuo+=_T(result1[flog-1].value2); 
					m_chucuo+=_T("):"); 
					m_chucuo+=_T("产生式(<程序> → main(){分程序})中'()'后面缺少'{'!\r\n"); 
					fenchengxu(); 
					flog++; 
					if(strcmp(result[flog].value0,"")) 
					{ 
						if(strcmp(result[flog].value0,"}")) 
						{ 
							bb++; 
							itoa(bb,B,10); 
							m_chucuo+=_T(B); 
							m_chucuo+=_T(".语法出错的位置坐标为"); 
							m_chucuo+=_T("("); 
							m_chucuo+=_T(result1[flog-1].value1); 
							m_chucuo+=_T(","); 
							m_chucuo+=_T(result1[flog-1].value2); 
							m_chucuo+=_T("):"); 
							m_chucuo+=_T("产生式(<程序> → main(){分程序})中555555缺少}!\r\n"); 
						} 
					} 
					else 
					{ 
						bb++; 
						itoa(bb,B,10); 
						m_chucuo+=_T(B); 
						m_chucuo+=_T(".语法出错的位置坐标为"); 
						m_chucuo+=_T("("); 
						m_chucuo+=_T(result1[flog-1].value1); 
						m_chucuo+=_T(","); 
						m_chucuo+=_T(result1[flog-1].value2); 
						m_chucuo+=_T("):"); 
						m_chucuo+=_T("产生式(<程序> → main(){分程序})中777缺少}!\r\n");/////////// 
					} 
					return 0; 
				} 
			} 
			else//缺少) 
			{ 
				bb++; 
				itoa(bb,B,10); 
				m_chucuo+=_T(B); 
				m_chucuo+=_T(".语法出错的位置坐标为"); 
				m_chucuo+=_T("("); 
				m_chucuo+=_T(result1[flog-1].value1); 
				m_chucuo+=_T(","); 
				m_chucuo+=_T(result1[flog-1].value2); 
				m_chucuo+=_T("):"); 
				m_chucuo+=_T("产生式(<程序> → main(){分程序})中'('后面缺少')'!\r\n"); 
				if(strcmp(result[flog].value0,"{")) 
				{ 
					bb++; 
					itoa(bb,B,10); 
					m_chucuo+=_T(B); 
					m_chucuo+=_T(".语法出错的位置坐标为"); 
					m_chucuo+=_T("("); 
					m_chucuo+=_T(result1[flog-1].value1); 
					m_chucuo+=_T(","); 
					m_chucuo+=_T(result1[flog-1].value2); 
					m_chucuo+=_T("):"); 
					m_chucuo+=_T("产生式(<程序> → main(){分程序})中')'后面缺少'{'!\r\n"); 
				} 
				else 
				{ 
					flog++; 
				} 
				fenchengxu(); 
				flog++; 
				if(strcmp(result[flog].value0,"")) 
				{ 
					if(strcmp(result[flog].value0,"}")) 
					{ 
						bb++; 
						itoa(bb,B,10); 
						m_chucuo+=_T(B); 
						m_chucuo+=_T(".语法出错的位置坐标为"); 
						m_chucuo+=_T("("); 
						m_chucuo+=_T(result1[flog-1].value1); 
						m_chucuo+=_T(","); 
						m_chucuo+=_T(result1[flog-1].value2); 
						m_chucuo+=_T("):"); 
						m_chucuo+=_T("产生式(<程序> → main(){分程序})中'{'后面缺少'}'!\r\n"); 
					} 
				} 
				else 
				{ 
					bb++; 
					itoa(bb,B,10); 
					m_chucuo+=_T(B); 
					m_chucuo+=_T(".语法出错的位置坐标为"); 
					m_chucuo+=_T("("); 
					m_chucuo+=_T(result1[flog-1].value1); 
					m_chucuo+=_T(","); 
					m_chucuo+=_T(result1[flog-1].value2); 
					m_chucuo+=_T("):"); 
					m_chucuo+=_T("产生式(<程序> → main(){分程序})中'{'后面缺少'}'!\r\n"); 
				} 
				return 0; 
			} 
		} 
		else//( 
		{ 
			bb++; 
			itoa(bb,B,10); 
			m_chucuo+=_T(B); 
			m_chucuo+=_T(".语法出错的位置坐标为"); 
			m_chucuo+=_T("("); 
			m_chucuo+=_T(result1[flog-1].value1); 
			m_chucuo+=_T(","); 
			m_chucuo+=_T(result1[flog-1].value2); 
			m_chucuo+=_T("):"); 
			m_chucuo+=_T("产生式(<程序> → main(){分程序})中main后面缺少'('!\r\n"); 
			if(strcmp(result[flog].value0,")")) 
			{ 
				bb++; 
				itoa(bb,B,10); 
				m_chucuo+=_T(B); 
				m_chucuo+=_T(".语法出错的位置坐标为"); 
				m_chucuo+=_T("("); 
				m_chucuo+=_T(result1[flog-1].value1); 
				m_chucuo+=_T(","); 
				m_chucuo+=_T(result1[flog-1].value2); 
				m_chucuo+=_T("):"); 
				m_chucuo+=_T("产生式(<程序> → main(){分程序5555})中main后面缺少')'!\r\n"); 
			} 
			else 
			{ 
				flog++; 
			} 
			if (strcmp(result[flog].value0,"{")) 
			{ 
				bb++; 
				itoa(bb,B,10); 
				m_chucuo+=_T(B); 
				m_chucuo+=_T(".语法出错的位置坐标为"); 
				m_chucuo+=_T("("); 
				m_chucuo+=_T(result1[flog-1].value1); 
				m_chucuo+=_T(","); 
				m_chucuo+=_T(result1[flog-1].value2); 
				m_chucuo+=_T("):"); 
				m_chucuo+=_T("产生式(<程序> → main(){分程5555序})中main后面缺少'{'!\r\n"); 
			} 
			else 
			{ 
				flog++; 
			} 
			fenchengxu(); 
			flog++; 
			if(strcmp(result[flog].value0,"")) 
			{ 
				if(strcmp(result[flog].value0,"}")) 
				{ 
					bb++; 
					itoa(bb,B,10); 
					m_chucuo+=_T(B); 
					m_chucuo+=_T(".语法出错的位置坐标为"); 
					m_chucuo+=_T("("); 
					m_chucuo+=_T(result1[flog-1].value1); 
					m_chucuo+=_T(","); 
					m_chucuo+=_T(result1[flog-1].value2); 
					m_chucuo+=_T("):"); 
					m_chucuo+=_T("产生式(<程序> → main(){分444程序})中main后面缺少'}'!\r\n"); 
				} 
			} 
			else 
			{ 
				bb++; 
				itoa(bb,B,10); 
				m_chucuo+=_T(B); 
				m_chucuo+=_T(".语法出错的位置坐标为"); 
				m_chucuo+=_T("("); 
				m_chucuo+=_T(result1[flog-1].value1); 
				m_chucuo+=_T(","); 
				m_chucuo+=_T(result1[flog-1].value2); 
				m_chucuo+=_T("):"); 
				m_chucuo+=_T("产生式(<程序> → main(){分程序})中main后5555面缺少'}'!\r\n"); 
			} 
			return 0; 
		} 
	} 
	else//main 
	{ 
		bb++; 
		itoa(bb,B,10); 
		m_chucuo+=_T(B); 
		m_chucuo+=_T(".语法出错的位置坐标为"); 
		m_chucuo+=_T("("); 
		m_chucuo+=_T(result1[flog-1].value1); 
		m_chucuo+=_T(","); 
		m_chucuo+=_T(result1[flog-1].value2); 
		m_chucuo+=_T("):"); 
		m_chucuo+=_T("产生式(<程序> → main(){分程序})中源文件开头缺少'main'!\r\n"); 
		return 0; 
	} 
} 
//<分程序> → <变量说明2> <变量说明><语句> 
bool CShixunView::fenchengxu(void) 
{ 
	if(bianliangsm2()) 
	{ 
		flog++; 
		if(bianliangsm()) 
		{ 
			flog++; 
			return yuju(); 
		} 
		else 
		{ 
			flog++; 
			yuju(); 
		//	m_chucuo+=_T("产生式(<分程序> → <变量说明2> <变量说明><语句>)中<<变量说明>分析出错!\r\n"); 
			return 0; 
		} 
	} 
	else 
	{ 
		flog++; 
		bianliangsm(); 
		flog++; 
		yuju(); 
		//m_chucuo+=_T("产生式(<分程序> → <变量说明> <语句>)中<变量说明>分析出错!\r\n"); 
		return 0; 
	} 
} 
//<变量说明> → 空| <类型><标识符><变量>;<变量声明> 
bool CShixunView::bianliangsm() 
{ 
	int d; 
	if(leixing()) 
	{ 
		flog++; 
		if(!strcmp(result[flog].class0,"2")) 
		{ 
			flog++; 
			if(bianliang()) 
			{ 
				flog++; 
				if(!strcmp(result[flog].value0,";")) 
				{ 
					flog++; 
					return bianliangsm(); 
				} 
				else 
				{ 
					bb++; 
					itoa(bb,B,10); 
					m_chucuo+=_T(B); 
					m_chucuo+=_T(".语法出错的位置坐标为"); 
					m_chucuo+=_T("("); 
					m_chucuo+=_T(result1[flog-1].value1); 
					m_chucuo+=_T(","); 
					m_chucuo+=_T(result1[flog-1].value2); 
					m_chucuo+=_T("):"); 
					m_chucuo+=_T("产生式(<变量说明> → <类型> <变量>;| <类型> <变量>;<变量说明>)中变量后面缺少缺少;!\r\n"); 
					bianliangsm(); 
					return 0; 
				} 
			} 
			else//,a变量出错  
			{ 
				flog++; 
				if(strcmp(result[flog].value0,";")) 
				{ 
					bb++; 
					itoa(bb,B,10); 
					m_chucuo+=_T(B); 
					m_chucuo+=_T(".语法出错的位置坐标为"); 
					m_chucuo+=_T("("); 
					m_chucuo+=_T(result1[flog-1].value1); 
					m_chucuo+=_T(","); 
					m_chucuo+=_T(result1[flog-1].value2); 
					m_chucuo+=_T("):"); 
					m_chucuo+=_T("产生式(<变量说明> → <类型> <变量>;| <类型> <变量>;<变量说明>)中变量后面缺少缺少;!\r\n"); 
					flog--; 
				} 
				flog++; 
				bianliangsm(); 
				return 0; 
 
			} 
			 
		} 
		else//标识符出错 
		{ 
			bb++; 
			itoa(bb,B,10); 
			m_chucuo+=_T(B); 
			m_chucuo+=_T(".语法出错的位置坐标为"); 
			m_chucuo+=_T("("); 
			m_chucuo+=_T(result1[flog-1].value1); 
			m_chucuo+=_T(","); 
			m_chucuo+=_T(result1[flog-1].value2); 
			m_chucuo+=_T("):"); 
			m_chucuo+=_T("产生式(<变量说明> → <类型> <变量>;| <类型> <变量>;<变量说明>)中<变量>分析出错!\r\n"); 
			bianliang(); 
			flog++; 
			if(strcmp(result[flog].value0,";")) 
			{ 
				bb++; 
				itoa(bb,B,10); 
				m_chucuo+=_T(B); 
				m_chucuo+=_T(".语法出错的位置坐标为"); 
				m_chucuo+=_T("("); 
				m_chucuo+=_T(result1[flog-1].value1); 
				m_chucuo+=_T(","); 
				m_chucuo+=_T(result1[flog-1].value2); 
				m_chucuo+=_T("):"); 
				m_chucuo+=_T("产生式(<变量说明> → <类型> <变量>;| <类型> <变量>;<变量说明>)中变量后面缺少缺少;!\r\n"); 
				flog--; 
			} 
			flog++; 
			bianliangsm(); 
			return 0; 
		} 
	} 
	else//类型不符 
	{ 
		if(!strcmp(result[flog].class0,"2")) 
		{ 
			flog++; 
			d=bianliang(); 
			if(d&&(!strcmp(result1[flog].value2,result1[flog-1].value2))) 
			{ 
				bb++; 
				itoa(bb,B,10); 
				m_chucuo+=_T(B); 
				m_chucuo+=_T(".语法出错的位置坐标为"); 
				m_chucuo+=_T("("); 
				m_chucuo+=_T(result1[flog-1].value1); 
				m_chucuo+=_T(","); 
				m_chucuo+=_T(result1[flog-1].value2); 
				m_chucuo+=_T("):"); 
				m_chucuo+=_T("产生式(<变量说明> → <类型> <变量>;| <类型>000000 <变量>;<变量说明>)中<类型>分析出错!\r\n"); 
				//return 0; 
				flog++; 
				if(strcmp(result[flog].value0,";")) 
				{ 
					bb++; 
					itoa(bb,B,10); 
					m_chucuo+=_T(B); 
					m_chucuo+=_T(".语法出错的位置坐标为"); 
					m_chucuo+=_T("("); 
					m_chucuo+=_T(result1[flog-1].value1); 
					m_chucuo+=_T(","); 
					m_chucuo+=_T(result1[flog-1].value2); 
					m_chucuo+=_T("):"); 
					m_chucuo+=_T("产生式(<变量说明> → <类型> <变量>;| <类型> <变量>;<变量说明>)中缺少:!\r\n"); 
					//return 0; 
					flog--; 
				} 
				flog++; 
				bianliangsm(); 
			} 
			else if(!d)//非法的变量,| a 
			{ 
				bb++; 
				itoa(bb,B,10); 
				m_chucuo+=_T(B); 
				m_chucuo+=_T(".语法出错的位置坐标为"); 
				m_chucuo+=_T("("); 
				m_chucuo+=_T(result1[flog-1].value1); 
				m_chucuo+=_T(","); 
				m_chucuo+=_T(result1[flog-1].value2); 
				m_chucuo+=_T("):"); 
				m_chucuo+=_T("产生式(<变量说明> → <类型> <变量>;| <类型> <变量>;<变量说明>)中<类型>分析出错!\r\n"); 
				//return 0; 
				flog++; 
				if(strcmp(result[flog].value0,";")) 
				{ 
					bb++; 
					itoa(bb,B,10); 
					m_chucuo+=_T(B); 
					m_chucuo+=_T(".语法出错的位置坐标为"); 
					m_chucuo+=_T("("); 
					m_chucuo+=_T(result1[flog-1].value1); 
					m_chucuo+=_T(","); 
					m_chucuo+=_T(result1[flog-1].value2); 
					m_chucuo+=_T("):"); 
					m_chucuo+=_T("产生式(<变量说明> → <类型> <变量>;| <类型> <变量>;<变量说明>)中缺少:!\r\n"); 
					//return 0; 
					flog--; 
				} 
				flog++; 
				bianliangsm(); 
			} 
			else 
			{ 
				flog--; 
				return 1; 
			} 
			return 0; 
		} 
		else 
		{ 
			flog--; 
			return 1; 
		} 
	} 
} 
// <变量声明2>-><类型><标识符><变量>;为空时出错! 
bool CShixunView::bianliangsm2() 
{ 
	int d; 
	if(leixing()) 
	{ 
		flog++; 
		if(!strcmp(result[flog].class0,"2")&&(!strcmp(result1[flog-1].value1,result1[flog].value1))) 
		{ 
			flog++; 
			if((!strcmp(result1[flog-1].value1,result1[flog].value1))&&bianliang()) 
			{ 
				flog++; 
				if(!strcmp(result[flog].value0,";")&&(!strcmp(result1[flog-1].value1,result1[flog].value1))) 
					return 1; 
				else 
				{ 
					bb++; 
					itoa(bb,B,10); 
					m_chucuo+=_T(B); 
					m_chucuo+=_T(".语法出错的位置坐标为"); 
					m_chucuo+=_T("("); 
					m_chucuo+=_T(result1[flog-1].value1); 
					m_chucuo+=_T(","); 
					m_chucuo+=_T(result1[flog-1].value2); 
					m_chucuo+=_T("):"); 
					m_chucuo+=_T("产生式(<变量声明2>-><类型><标识符><变量>)中<类型>缺少;!\r\n"); 
					//return 0; 
					flog--; 
					return 0; 
				} 
			} 
			else//,a变量出错  
			{ 
				flog++; 
				if(strcmp(result[flog].value0,";")) 
				{ 
					bb++; 
					itoa(bb,B,10); 
					m_chucuo+=_T(B); 
					m_chucuo+=_T(".语法出错的位置坐标为"); 
					m_chucuo+=_T("("); 
					m_chucuo+=_T(result1[flog-1].value1); 
					m_chucuo+=_T(","); 
					m_chucuo+=_T(result1[flog-1].value2); 
					m_chucuo+=_T("):"); 
					m_chucuo+=_T("产生式(<变量声明2>-><类型><标识符><变量>)中<类型>缺少:!\r\n"); 
					//return 0; 
					flog--; 
				} 
				return 0; 
			} 
 
		} 
		else//标识符出错  
		{ 
			bb++; 
			itoa(bb,B,10); 
			m_chucuo+=_T(B); 
			m_chucuo+=_T(".语法出错的位置坐标为"); 
			m_chucuo+=_T("("); 
			m_chucuo+=_T(result1[flog-1].value1); 
			m_chucuo+=_T(","); 
			m_chucuo+=_T(result1[flog-1].value2); 
			m_chucuo+=_T("):"); 
			m_chucuo+=_T("产生式(<变量声明2>-><类型><标识符><变量>)中缺少变量名!\r\n"); 
			bianliang(); 
			flog++; 
			if(strcmp(result[flog].value0,";")) 
			{ 
				bb++; 
				itoa(bb,B,10); 
				m_chucuo+=_T(B); 
				m_chucuo+=_T(".语法出错的位置坐标为"); 
				m_chucuo+=_T("("); 
				m_chucuo+=_T(result1[flog-1].value1); 
				m_chucuo+=_T(","); 
				m_chucuo+=_T(result1[flog-1].value2); 
				m_chucuo+=_T("):"); 
				m_chucuo+=_T("产生式(<变量声明2>-><类型><标识符><变量>)中<类型>缺少:!\r\n"); 
				//return 0; 
				flog--; 
			} 
			return 0; 
		} 
	} 
	else//类型不符 
	{ 
		if(!strcmp(result[flog].class0,"2")) 
		{ 
			flog++; 
			d=bianliang(); 
			if(d&&(strcmp(result1[flog].value2,result1[flog-1].value2))) 
			{ 
				bb++; 
				itoa(bb,B,10); 
				m_chucuo+=_T(B); 
				m_chucuo+=_T(".语法出错的位置坐标为"); 
				m_chucuo+=_T("("); 
				m_chucuo+=_T(result1[flog-1].value1); 
				m_chucuo+=_T(","); 
				m_chucuo+=_T(result1[flog-1].value2); 
				m_chucuo+=_T("):"); 
				m_chucuo+=_T("产生式(<变量声明2>-><类型><标识符><变量>)中<类型>缺少类型名!\r\n"); 
				//return 0; 
				flog++; 
				if(strcmp(result[flog].value0,";")) 
				{ 
					bb++; 
					itoa(bb,B,10); 
					m_chucuo+=_T(B); 
					m_chucuo+=_T(".语法出错的位置坐标为"); 
					m_chucuo+=_T("("); 
					m_chucuo+=_T(result1[flog-1].value1); 
					m_chucuo+=_T(","); 
					m_chucuo+=_T(result1[flog-1].value2); 
					m_chucuo+=_T("):"); 
					m_chucuo+=_T("产生式(<变量声明2>-><类型><标识符><变量>)中<类型>缺少:!\r\n"); 
					//return 0; 
					flog--; 
				} 
			} 
	 
			else if(!d)//非法的变量,| a 
			{ 
				bb++; 
				itoa(bb,B,10); 
				m_chucuo+=_T(B); 
				m_chucuo+=_T(".语法出错的位置坐标为"); 
				m_chucuo+=_T("("); 
				m_chucuo+=_T(result1[flog-1].value1); 
				m_chucuo+=_T(","); 
				m_chucuo+=_T(result1[flog-1].value2); 
				m_chucuo+=_T("):"); 
				m_chucuo+=_T("产生式(<变量声明2>-><类型><标识符><变量>)中<类型>缺少:!\r\n"); 
				//return 0; 
				flog++; 
				if(strcmp(result[flog].value0,";")) 
				{	 
					bb++; 
					itoa(bb,B,10); 
					m_chucuo+=_T(B); 
					m_chucuo+=_T(".语法出错的位置坐标为"); 
					m_chucuo+=_T("("); 
					m_chucuo+=_T(result1[flog-1].value1); 
					m_chucuo+=_T(","); 
					m_chucuo+=_T(result1[flog-1].value2); 
					m_chucuo+=_T("):"); 
					m_chucuo+=_T("产生式(<变量声明2>-><类型><标识符><变量>)中<类型>缺少:!\r\n"); 
					//return 0; 
					flog--; 
				} 
			} 
			else 
			{ 
				bb++; 
				itoa(bb,B,10); 
				m_chucuo+=_T(B); 
				m_chucuo+=_T(".语法出错的位置坐标为"); 
				m_chucuo+=_T("("); 
				m_chucuo+=_T(result1[flog-1].value1); 
				m_chucuo+=_T(","); 
				m_chucuo+=_T(result1[flog-1].value2); 
				m_chucuo+=_T("):"); 
				m_chucuo+=_T("产生式(<变量声明2>-><类型><标识符><变量>)中<类型>缺少:!\r\n"); 
				//return 0; 
				flog--; 
			} 
			return 0; 
		} 
		else//标识符不符 
		{ 
			bb++; 
			itoa(bb,B,10); 
			m_chucuo+=_T(B); 
			m_chucuo+=_T(".语法出错的位置坐标为"); 
			m_chucuo+=_T("("); 
			m_chucuo+=_T(result1[flog-1].value1); 
			m_chucuo+=_T(","); 
			m_chucuo+=_T(result1[flog-1].value2); 
			m_chucuo+=_T("):"); 
			m_chucuo+=_T("产生式(<变量声明2>-><类型><标识符><变量>)中<类型>缺少:!\r\n"); 
			//return 0; 
			flog--; 
			return 0; 
		} 
	} 
} 
//<语句> → <赋值语句>| <条件判断语句> 
bool CShixunView::yuju() 
{ 
	if(!strcmp(result[flog].value0,"if")) 
	{ 
		return tiaojian(); 
	} 
	else 
	{ 
		return fuzhi(); 
	} 
} 
//<类型> → int | real | char 
bool CShixunView::leixing() 
{ 
	if((strcmp(result[flog].value0,"int")==0)||(strcmp(result[flog].value0,"real")==0)||(strcmp(result[flog].value0,"char")==0)) 
	{ 
		return 1; 
	} 
	else 
	{ 
		return 0; 
	} 
} 
 
//变量-〉,<标志符><变量>|空 
bool CShixunView::bianliang() 
{ 
	if(!strcmp(result[flog].value0,",")&&(!strcmp(result1[flog-1].value1,result1[flog].value1))) 
	{ 
		flog++; 
		if(!strcmp(result[flog].class0,"2")&&(!strcmp(result1[flog-1].value1,result1[flog].value1))) 
		{ 
			flog++; 
			return bianliang(); 
		} 
		else 
		{ 
			bb++; 
			itoa(bb,B,10); 
			m_chucuo+=_T(B); 
			m_chucuo+=_T(".语法出错的位置坐标为"); 
			m_chucuo+=_T("("); 
			m_chucuo+=_T(result1[flog-1].value1); 
			m_chucuo+=_T(","); 
			m_chucuo+=_T(result1[flog-1].value2); 
			m_chucuo+=_T("):"); 
			m_chucuo+=_T("产生式(变量-〉,<标志符><变量>|空)中多余;!\r\n"); 
			bianliang(); 
			return 0; 
		} 
	} 
	else 
	{ 
		if(!strcmp(result[flog].class0,"2")&&(!strcmp(result1[flog-1].value1,result1[flog].value1))) 
		{ 
			bb++; 
			itoa(bb,B,10); 
			m_chucuo+=_T(B); 
			m_chucuo+=_T(".语法出错的位置坐标为"); 
			m_chucuo+=_T("("); 
			m_chucuo+=_T(result1[flog-1].value1); 
			m_chucuo+=_T(","); 
			m_chucuo+=_T(result1[flog-1].value2); 
			m_chucuo+=_T("):"); 
			m_chucuo+=_T("产生式(变量-〉,<标志符><变量>|空)中缺少多余的,!\r\n"); 
			flog++; 
			bianliang(); 
			return 0; 
		} 
		else 
		{ 
			flog--; 
			return 1; 
		} 
	} 
		 
} 
 
//<赋值语句> →<变量> = <算术表达式><赋值语句2> 
bool CShixunView::fuzhi() 
{ 
	if(!strcmp(result[flog].class0,"2")) 
	{ 
		strcpy(temp6,result[flog].value0); 
		flog++; 
		 
		if(!strcmp(result[flog].value0,"=")&&(!strcmp(result1[flog-1].value1,result1[flog].value1))) 
		{ 
			strcpy(temp5,"="); 
			flog++; 
			strcpy(temp7,suanshubds()); 
			if(suanshubds()) 
			{	 
				strcpy(temp8," "); 
				bb++; 
				itoa(bb,B,10); 
				m_chucuo+=_T(B); 
				m_chucuo+=_T("."); 
				m_chucuo+=_T("<"); 
				m_chucuo+=_T(temp5); 
				m_chucuo+=_T(","); 
				m_chucuo+=_T(temp6); 
				m_chucuo+=_T(","); 
				m_chucuo+=_T(temp7); 
				m_chucuo+=_T(","); 
				m_chucuo+=_T(temp8); 
				m_chucuo+=_T("\t>\r\n"); 
				flog++; 
				return fuzhi2(); 
			} 
			else 
			{ 
				flog++; 
				fuzhi2(); 
				return 0; 
			} 
		} 
		else 
		{ 
			bb++; 
			itoa(bb,B,10); 
			m_chucuo+=_T(B); 
			m_chucuo+=_T(".语法出错的位置坐标为"); 
			m_chucuo+=_T("("); 
			m_chucuo+=_T(result1[flog-1].value1); 
			m_chucuo+=_T(","); 
			m_chucuo+=_T(result1[flog-1].value2); 
			m_chucuo+=_T("):"); 
			m_chucuo+=_T("产生式(<赋值语句> →<变量> = <算术表达式><赋值语句2>)中缺少=!\r\n");	 
			suanshubds(); 
			flog++; 
			fuzhi2(); 
			return 0; 
		} 
	} 
	else 
	{ 
		if(!strcmp(result[flog].class0,"6")&&(!strcmp(result1[flog-1].value1,result1[flog].value1))) 
		{ 
			bb++; 
			itoa(bb,B,10); 
			m_chucuo+=_T(B); 
			m_chucuo+=_T(".语法出错的位置坐标为"); 
			m_chucuo+=_T("("); 
			m_chucuo+=_T(result1[flog-1].value1); 
			m_chucuo+=_T(","); 
			m_chucuo+=_T(result1[flog-1].value2); 
			m_chucuo+=_T("):"); 
			m_chucuo+=_T("产生式(<赋值语句> →<变量> = <算术表达式><赋值语句2>)中左边必须是变量!\r\n");	 
			flog++; 
			suanshubds(); 
			flog++; 
			fuzhi2(); 
			return 0; 
		} 
		else 
		{ 
			suanshubds(); 
			flog++; 
			fuzhi2(); 
			return 0; 
		} 
	} 
} 
//<赋值语句2> →;<语句><赋值语句2>|; 
bool CShixunView::fuzhi2() 
{ 
	if(!strcmp(result[flog].value0,";")) 
	{ 
		flog++; 
		if(!strcmp(result[flog].class0,"2")) 
		{ 
			return fuzhi(); 
		} 
		else if(!strcmp(result[flog].value0,"if")) 
		{ 
			return tiaojian(); 
		} 
		else 
		{ 
			flog--; 
			return 1; 
		} 
	} 
	else 
	{ 
		bb++; 
		itoa(bb,B,10); 
		m_chucuo+=_T(B); 
		m_chucuo+=_T(".语法出错的位置坐标为"); 
		m_chucuo+=_T("("); 
		m_chucuo+=_T(result1[flog-1].value1); 
		m_chucuo+=_T(","); 
		m_chucuo+=_T(result1[flog-1].value2); 
		m_chucuo+=_T("):"); 
		m_chucuo+=_T("产生式(<赋值语句2> →;<语句><赋值语句2>|;)中缺少;!\r\n");	 
		if(!strcmp(result[flog].class0,"2")) 
		{ 
			return fuzhi(); 
		} 
		else if(!strcmp(result[flog].value0,"if")) 
		{ 
			return tiaojian(); 
		} 
		flog--; 
		return 0; 
	} 
} 
//<条件判断语句> → if <关系表达式> <语句><条件判断语句2>| 
//								if <关系表达式> <语句> else <语句><条件判断语句2> 
bool CShixunView::tiaojian() 
{ 
	flog++; 
		if(guanxibds()&&(!strcmp(result1[flog-1].value1,result1[flog].value1))) 
		{ 
			flog++; 
			if(yuju()) 
			{ 
				flog++; 
				if(!strcmp(result[flog].value0,"else")) 
				{ 
					flog++; 
					return yuju(); 
				} 
				else 
				{ 
					flog--; 
					return 1; 
				} 
			} 
			else 
			{ 
				flog++; 
				if(!result[flog].value0,"else") 
				{ 
					flog++; 
					yuju(); 
					return 0; 
				} 
				flog--; 
				return 0; 
			} 
		} 
		else 
		{ 
			flog++; 
			yuju(); 
			flog++; 
			if(!strcmp(result[flog].value0,"else")) 
			{ 
				flog++; 
				yuju(); 
			} 
			else 
			{ 
				tiaojian2(); 
			} 
			return 0; 
		} 
		 
} 
 
//	<条件判断语句2> →;<语句><条件判断语句2>|空 
bool CShixunView::tiaojian2() 
{ 
	if(!strcmp(result[flog].value0,";")) 
	{ 
		flog++; 
		if(!strcmp(result[flog].class0,"2")) 
		{ 
			return fuzhi(); 
		} 
		else if(!strcmp(result[flog].value0,"if")) 
		{ 
			return tiaojian(); 
		} 
		else 
		{ 
			flog--; 
			return 1; 
		} 
	} 
	else 
	{ 
		bb++; 
		itoa(bb,B,10); 
		m_chucuo+=_T(B); 
		m_chucuo+=_T(".语法出错的位置坐标为"); 
		m_chucuo+=_T("("); 
		m_chucuo+=_T(result1[flog-1].value1); 
		m_chucuo+=_T(","); 
		m_chucuo+=_T(result1[flog-1].value2); 
		m_chucuo+=_T("):"); 
		m_chucuo+=_T("产生式(<条件判断语句2> →;<语句><条件判断语句2>|空)中缺少;!\r\n"); 
		if(!strcmp(result[flog].class0,"2")) 
		{ 
			return fuzhi(); 
		} 
		else if(!strcmp(result[flog].value0,"if")) 
		{ 
			return tiaojian(); 
		} 
		flog--; 
		return 0; 
	} 
} 
//<算术表达式> →<项><算术表达式2> 
char* CShixunView::suanshubds() 
{ 
	strcpy(temp20,xiang()); 
	if(xiang()) 
	{ 
		flog++; 
		return suanshubds2(); 
 
	} 
	else 
	{ 
		flog++; 
		suanshubds2(); 
		return(temp20); 
		//m_chucuo+=_T("产生式(<算术表达式> →<项><算术表达式2>)中<项>分析出错!\r\n"); 
		//return 0; 
	} 
	 
} 
//<算术表达式2> → + <项><算术表达式2>|-<项><算术表达式2>|空 
char* CShixunView::suanshubds2() 
{ 
	int f1=0,f2=0,f3=0,f4=0; 
	f1=atoi(result1[flog-1].value1); 
	f2=atoi(result1[flog].value1); 
	f3=atoi(result1[flog-1].value2); 
	f4=atoi(result1[flog].value2); 
	 
	char temp1[30]; 
	char temp3[30]; 
	char temp4[30]; 
	if((!strcmp(result[flog].value0,"+"))||(!strcmp(result[flog].value0,"-"))) 
	{ 
		 
		strcpy(temp1,result[flog].value0); 
		flog++; 
		strcpy(temp3,xiang()); 
		if(xiang()) 
		{ 
			 
			strcpy(temp4,newtemp()); 
			 
			bb++; 
			itoa(bb,B,10); 
			m_chucuo+=_T(B); 
			m_chucuo+=_T("."); 
			m_chucuo+=_T("<"); 
			m_chucuo+=_T(temp1); 
			m_chucuo+=_T(","); 
			m_chucuo+=_T(temp20); 
			m_chucuo+=_T(","); 
			m_chucuo+=_T(temp3); 
			m_chucuo+=_T(","); 
			m_chucuo+=_T(temp4); 
			m_chucuo+=_T("\t>\r\n"); 
			strcpy(temp20,temp4); 
			flog++; 
			return suanshubds2(); 
		} 
		else 
		{ 
			flog++; 
			suanshubds(); 
			//return 0; 
			return(temp20); 
		} 
	} 
	else if((!strcmp(result[flog].value0,"(")) 
		||(!strcmp(result[flog].class0,"3")) 
		||(!strcmp(result[flog].class0,"2")) 
		&&(f1==f2) 
		&&(f3==f4-1)) 
		{ 
			bb++; 
			itoa(bb,B,10); 
			m_chucuo+=_T(B); 
			m_chucuo+=_T(".语法出错的位置坐标为"); 
			m_chucuo+=_T("("); 
			m_chucuo+=_T(result1[flog-1].value1); 
			m_chucuo+=_T(","); 
			m_chucuo+=_T(result1[flog-1].value2); 
			m_chucuo+=_T("):"); 
			m_chucuo+=_T("产生式(<算术表达式2> → + <项><算术表达式2>|-<项><算术表达式2>|空)中缺少算术运算符!\r\n"); 
			flog++; 
			suanshubds2(); 
			//return 0; 
			return(temp20); 
		} 
	else 
	{ 
		flog--; 
		return(temp20); 
		//return 1; 
	} 
	 
} 
//<项>→<因式><项2> 
char* CShixunView::xiang() 
{ 
	strcpy(temp2,yinshi());		 
	if(yinshi()) 
	{ 
		flog++; 
		return xiang2(); 
		//strcpy(eplace,xiang2()); 
	} 
	else 
	{ 
		flog++; 
		xiang2(); 
		return(temp2); 
		//return 0; 
		m_chucuo+=_T("产生式(<项>→<因式><项2>)中<因式>分析出错!\r\n"); 
	} 
	 
} 
//<项2>→*<因式><项2>|/<因式><项2>|空 
char* CShixunView::xiang2() 
{ 
	int f5=0,f6=0,f7=0,f8=0; 
	f5=atoi(result1[flog-1].value1); 
	f6=atoi(result1[flog].value1); 
	f7=atoi(result1[flog-1].value2); 
	f8=atoi(result1[flog].value2);	 
	char temp1[30]; 
	char temp3[30]; 
	char temp4[30]; 
	if((!strcmp(result[flog].value0,"*"))||(!strcmp(result[flog].value0,"/"))) 
	{		 
		strcpy(temp1,result[flog].value0); 
		flog++; 
		strcpy(temp3,yinshi()); 
		if(!yinshi()) 
		{ 
			flog++; 
			xiang2(); 
			//return 0; 
			return(temp2); 
		} 
		else 
		{ 
			 
			strcpy(temp4,newtemp()); 
			 
			bb++; 
			itoa(bb,B,10); 
			m_chucuo+=_T(B); 
			m_chucuo+=_T("."); 
			m_chucuo+=_T("<"); 
			m_chucuo+=_T(temp1); 
			m_chucuo+=_T(","); 
			m_chucuo+=_T(temp2); 
			m_chucuo+=_T(","); 
			m_chucuo+=_T(temp3); 
			m_chucuo+=_T(","); 
			m_chucuo+=_T(temp4); 
			m_chucuo+=_T("\t>\r\n"); 
			strcpy(temp2,temp4); 
			flog++; 
			return xiang2(); 
		} 
	} 
	else if((!strcmp(result[flog].value0,"(")) 
			||(!strcmp(result[flog].class0,"3")) 
			||(!strcmp(result[flog].class0,"2")) 
			&&(!strcmp(result1[flog-1].value1,result1[flog].value1)) 
			&&(f7==f8-1)) 
	{ 
		yinshi(); 
		bb++; 
		itoa(bb,B,10); 
		m_chucuo+=_T(B); 
		m_chucuo+=_T(".语法出错的位置坐标为"); 
		m_chucuo+=_T("("); 
		m_chucuo+=_T(result1[flog-1].value1); 
		m_chucuo+=_T(","); 
		m_chucuo+=_T(result1[flog-1].value2); 
		m_chucuo+=_T("):"); 
		m_chucuo+=_T("产生式(<项2>→*<因式><项2>|/<因式><项2>|空)中缺少算术运算符!\r\n"); 
		flog++; 
		xiang2(); 
		//return 0; 
		return(temp2); 
	} 
	else 
	{ 
		flog--; 
		//return 1; 
		return(temp2); 
	} 
	 
} 
//<因式> → <变量> | <常数>|(<算术表达式>) 
char* CShixunView::yinshi() 
{ 
	char *fplace; 
	fplace=(char*)malloc(30); 
	strcpy(fplace," "); 
	if((!strcmp(result[flog].class0,"2"))||(!strcmp(result[flog].class0,"3"))) 
	{ 
		strcpy(fplace,result[flog].value0); 
		//return 1; 
	} 
	else if(!strcmp(result[flog].value0,"(")) 
	{ 
		flog++; 
		if(suanshubds()) 
		{ 
			strcpy(fplace,suanshubds()); 
			flog++; 
			if(strcmp(result[flog].value0,")")!=0) 
			{ 
				bb++; 
				itoa(bb,B,10); 
				m_chucuo+=_T(B); 
				m_chucuo+=_T(".语法出错的位置坐标为"); 
				m_chucuo+=_T("("); 
				m_chucuo+=_T(result1[flog-1].value1); 
				m_chucuo+=_T(","); 
				m_chucuo+=_T(result1[flog-1].value2); 
				m_chucuo+=_T("):"); 
				m_chucuo+=_T("产生式(<因式> → <变量> | <常数>|(<算术表达式>))中缺少)!\r\n"); 
				flog--; 
				//return 0; 
			} 
			//return 1; 
		} 
		else 
		{ 
			if(strcmp(result[flog].value0,")")!=0) 
			{ 
				bb++; 
				itoa(bb,B,10); 
				m_chucuo+=_T(B); 
				m_chucuo+=_T(".语法出错的位置坐标为"); 
				m_chucuo+=_T("("); 
				m_chucuo+=_T(result1[flog-1].value1); 
				m_chucuo+=_T(","); 
				m_chucuo+=_T(result1[flog-1].value2); 
				m_chucuo+=_T("):"); 
				m_chucuo+=_T("产生式(<因式> → <变量> | <常数>|(<算术表达式>))中缺少)!\r\n"); 
				//return 0; 
			} 
			flog++; 
			//return 0; 
		} 
	} 
	else//!=( 
	{ 
		if((!strcmp(result[flog].class0,"2"))||(!strcmp(result[flog].class0,"3"))) 
		{ 
			bb++; 
			itoa(bb,B,10); 
			m_chucuo+=_T(B); 
			m_chucuo+=_T(".语法出错的位置坐标为"); 
			m_chucuo+=_T("("); 
			m_chucuo+=_T(result1[flog-1].value1); 
			m_chucuo+=_T(","); 
			m_chucuo+=_T(result1[flog-1].value2); 
			m_chucuo+=_T("):"); 
			m_chucuo+=_T("产生式(<因式> → <变量> | <常数>|(<算术表达式>))中缺少(!\r\n"); 
			flog++; 
			if(strcmp(result[flog].value0,")")!=0) 
			{ 
				bb++; 
				itoa(bb,B,10); 
				m_chucuo+=_T(B); 
				m_chucuo+=_T(".语法出错的位置坐标为"); 
				m_chucuo+=_T("("); 
				m_chucuo+=_T(result1[flog-1].value1); 
				m_chucuo+=_T(","); 
				m_chucuo+=_T(result1[flog-1].value2); 
				m_chucuo+=_T("):"); 
				m_chucuo+=_T("产生式(<因式> → <变量> | <常数>|(<算术表达式>))中缺少)!\r\n"); 
				flog--; 
			} 
		} 
		else 
		{ 
			if(!strcmp(result[flog].value0,")")) 
			{ 
				flog++; 
				bb++; 
				itoa(bb,B,10); 
				m_chucuo+=_T(B); 
				m_chucuo+=_T(".语法出错的位置坐标为"); 
				m_chucuo+=_T("("); 
				m_chucuo+=_T(result1[flog-1].value1); 
				m_chucuo+=_T(","); 
				m_chucuo+=_T(result1[flog-1].value2); 
				m_chucuo+=_T("):"); 
				m_chucuo+=_T("产生式(<因式> → <变量> | <常数>|(<算术表达式>))中缺少(!\r\n"); 
			} 
			bb++; 
			itoa(bb,B,10); 
			m_chucuo+=_T(B); 
			m_chucuo+=_T(".语法出错的位置坐标为"); 
			m_chucuo+=_T("("); 
			m_chucuo+=_T(result1[flog-1].value1); 
			m_chucuo+=_T(","); 
			m_chucuo+=_T(result1[flog-1].value2); 
			m_chucuo+=_T("):"); 
			m_chucuo+=_T("产生式(<因式> → <变量> | <常数>|(<算术表达式>))中没有预期的算术表达式或是常量!\r\n"); 
		} 
		//return 0; 
	} 
	return(fplace); 
} 
 
//<关系表达式> → <算术表达式><关系符><算术表达式> 
bool CShixunView::guanxibds() 
{ 
	strcpy(temp10,suanshubds()); 
	if(suanshubds()) 
	{ 
		 
		flog++; 
		 
		if(!strcmp(result[flog].class0,"7")) 
		{			 
			 
			strcpy(temp9,result[flog].value0); 
			flog++; 
			strcpy(temp11,suanshubds()); 
			strcpy(temp12," "); 
			bb++; 
			itoa(bb,B,10); 
			m_chucuo+=_T(B); 
			m_chucuo+=_T("."); 
			m_chucuo+=_T("<"); 
			m_chucuo+=_T(temp9); 
			m_chucuo+=_T(","); 
			m_chucuo+=_T(temp10); 
			m_chucuo+=_T(","); 
			m_chucuo+=_T(temp11); 
			m_chucuo+=_T(","); 
			m_chucuo+=_T(temp12); 
			m_chucuo+=_T("\t>\r\n"); 
			return suanshubds(); 
			 
		} 
		else 
		{ 
			bb++; 
			itoa(bb,B,10); 
			m_chucuo+=_T(B); 
			m_chucuo+=_T(".语法出错的位置坐标为"); 
			m_chucuo+=_T("("); 
			m_chucuo+=_T(result1[flog-1].value1); 
			m_chucuo+=_T(","); 
			m_chucuo+=_T(result1[flog-1].value2); 
			m_chucuo+=_T("):"); 
			//m_chucuo+=_T("产生式(<条件判断语句2> →;<语句><条件判断语句2>|空)中缺少;!\r\n"); 
			m_chucuo+=_T("产生式(<关系表达式> → <算术表达式><关系符><算术表达式>) 中缺少<关系符>!\r\n"); 
			suanshubds(); 
			return 0; 
		} 
	} 
	else 
	{ 
		if(!strcmp(result[flog].class0,"7")) 
		{ 
			flog++; 
			suanshubds(); 
		} 
		else 
			suanshubds(); 
		return 0; 
	} 
} 
 
 
char* CShixunView::newtemp() 
{ 
	char *p; 
	char m[100];	 
	p=(char*)malloc(100); 
	k2++; 
	itoa(k2,m,10); 
	strcpy(p+1,m); 
	p[0]='T'; 
	return(p); 
}