⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ll(1)分析法.cpp

📁 编译程序的实验~~ 很详细哈..需要的下来看看!
💻 CPP
字号:
#include "iostream.h"
#include "conio.h"
#include "stdio.h"
#include "afx.h"

//产生式定义
CString str[]={"E->TG" , "G->+TG" , "G->-TG" , "G->e" , "T->FS" ,//用小写的e代替ε
 "S->*FS" , "S->/FS" , "S->e" , "F->(E)" , "F->i"};

main(){
	CString str1="",str2="#E";
	char c;
	int count=1;//步骤计算
	int i,j;
	printf("LL(1)分析程序,编制人:刘灿明 Ap0406519 网络工程\n\n");
	printf("请输入一以#结束的符号串(包括+-*/()i#):");
	c=getchar();
	while(c!='\n'){
		str1.Insert(str1.GetLength(),c);
		c=getchar();
	}
	printf("步骤      分析栈      剩余输入串      所用产生式\n");
	printf(" %d        ",count++);
    for(i=0;i<str2.GetLength();i++)
		printf("%c",str2.GetAt(i));
	for(i=0;i+str2.GetLength()<12;i++)
		printf(" ");
	for(i=0;i<str1.GetLength();i++)
		printf("%c",str1.GetAt(i));
	for(i=0;i+str1.GetLength()<16;i++)
		printf(" ");
	j=0;
	for(i=0;i<str[j].GetLength();i++)
		printf("%c",str[j].GetAt(i));
	printf("\n");

	while(!str1.IsEmpty()&&!str2.IsEmpty()){
		if(j<10){
			str2.Delete(str2.GetLength()-1);
			for(i=str[j].GetLength()-1;i>=3;i--)
				str2.Insert(str2.GetLength(),str[j].GetAt(i));
			j=10;
		}
		if(str2.GetAt(str2.GetLength()-1)=='e')
			str2.Delete(str2.GetLength()-1);
		printf(" %d        ",count++);
		for(i=0;i<str2.GetLength();i++)
				printf("%c",str2.GetAt(i));
		for(i=0;i+str2.GetLength()<12;i++)
			printf(" ");
		for(i=0;i<str1.GetLength();i++)
			printf("%c",str1.GetAt(i));	
		for(i=0;i+str1.GetLength()<16;i++)
			printf(" ");
		
		//判断匹配和寻找产生式
		if(str1.GetAt(0)==str2.GetAt(str2.GetLength()-1)){
			str1.Delete(0);
			str2.Delete(str2.GetLength()-1);
			printf("匹配\n");
			if(str1.IsEmpty()&&str2.IsEmpty())
				printf("成功!\n");
		}
		else{
			if(str1.GetAt(0)!='#'&&str2.GetAt(str2.GetLength()-1)!='#'){
				for(i=0;i<10;i++){
					if(str[i].GetAt(0)==str2.GetAt(str2.GetLength()-1)&&str[i].GetAt(3)>=65&&str[i].GetAt(3)<=90){
						j=i;
						break;
					}
					if(str[i].GetAt(0)==str2.GetAt(str2.GetLength()-1)&&str[i].GetAt(3)=='e'){
						j=i;
						break;
					}
					if(str[i].GetAt(0)==str2.GetAt(str2.GetLength()-1)&&str[i].GetAt(3)==str1.GetAt(0)){
						j=i;
						break;
					}
				}
				if(i==10){
					printf("出错!\n");
					break;
				}
			}
			else if(str1.GetAt(0)=='#'&&str2.GetAt(str2.GetLength()-1)!='#'){
				for(i=0;i<10;i++){
					if(str[i].GetAt(0)==str2.GetAt(str2.GetLength()-1)&&str[i].GetAt(3)=='e'){
						j=i;
						break;
					}
				}
				if(i==10){
					printf("出错!\n");
					break;
				}
			}
			else if(str1.GetAt(0)=='#'&&str2.GetAt(str2.GetLength()-1)=='#'){
				printf("成功!\n");
				return;
			}
			else{
				printf("出错!\n");
				break;
			}
			for(i=0;i<str[j].GetLength();i++)
				printf("%c",str[j].GetAt(i));
			printf("\n");
		}
		//判断匹配和寻找产生式
	}
	getch();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -