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

📄 show.h

📁 编译原理SLR(1)语法分析器
💻 H
字号:
#include "data.h"
#include <iostream>
#include <fstream>
using namespace std;

ofstream out1("FOLLOW.txt");
ofstream out2("G.txt");
ofstream out3("G_extend.txt");
ofstream out4("LR(0)Set.txt");
ofstream out5("SLR(1)Grid.txt");

void Show_First()
{
	for(int i=0;i<vn_cnt;i++)
    {
		cout<<"FIRST("<<Vn[i]<<")={  ";
        for(int ii=0;ii<31;ii++) 
          if(first_v[Vn[i]]&binary[ii]) cout<<Vt[ii]<<' ';
		cout<<" }"<<endl;
    }

	for(int i=0;i<vn_cnt;i++)
    {
		out1<<"FIRST("<<Vn[i]<<")={  ";
        for(int ii=0;ii<31;ii++) 
          if(first_v[Vn[i]]&binary[ii]) out1<<Vt[ii]<<' ';
		out1<<" }"<<endl;
    }
}

void Show_Follow()
{
	for(int i=0;i<vn_cnt;i++)
    {
		cout<<"FOLLOW("<<Vn[i]<<")={  ";
        for(int j=0;j<31;j++) if(follow[Vn[i]].t&binary[j]) cout<<Vt[j]<<' ';
        if(follow[Vn[i]].start) cout<<"# ";
		cout<<" }"<<endl;
    }

	for(int i=0;i<vn_cnt;i++)
    {
		out1<<"FOLLOW("<<Vn[i]<<")={  ";
        for(int j=0;j<31;j++) if(follow[Vn[i]].t&binary[j]) out1<<Vt[j]<<' ';
        if(follow[Vn[i]].start) out1<<"# ";
		out1<<" }"<<endl;
    }

}

void Show_G_extend()
{
	cout<<endl<<"拓展文法G~为:  "<<endl;
	for(int i=0;i<g_extend_cnt;i++)
    {
        cout<<i<<' '<<g_extend[i].left<<"->";
        for(int j=0;j<g_extend[i].l;j++)
        {
            if(j==g_extend[i].dot_pos) cout<<'.'<<g_extend[i].right[j];
            else cout<<g_extend[i].right[j];
        }
        if(g_extend[i].l==g_extend[i].dot_pos) cout<<'.';
        cout<<endl;
    }

	out3<<"拓展文法G~为:  "<<endl;
	for(int i=0;i<g_extend_cnt;i++)
    {
        out3<<i<<' '<<g_extend[i].left<<"->";
        for(int j=0;j<g_extend[i].l;j++)
        {
            if(j==g_extend[i].dot_pos) out3<<'.'<<g_extend[i].right[j];
            else out3<<g_extend[i].right[j];
        }
        if(g_extend[i].l==g_extend[i].dot_pos) out3<<'.';
        out3<<endl;
    }
}

void Show_SLR1Grid()
{
	cout<<endl<<"SLR分析表为:"<<endl;
	cout<<"    ";
    for(int j=0;j<vt_cnt;j++) cout<<Vt[j]<<"   ";  
    for(int j=0;j<vn_cnt;j++) cout<<Vn[j]<<"  ";
    cout<<endl;
    
    for(int i=0;i<c_len;i++)
    {
		if(i<10)
        cout<<i<<"  ";
		else cout<<i<<' ';
      for(int j=0;j<vt_cnt;j++)
      {
			if(ACTION[i][Vt[j]]==0) cout<<"acc";
			else if(ACTION[i][Vt[j]]==ERROR) cout<<"    ";
            else if(ACTION[i][Vt[j]]>=0) cout<<'s'<<ACTION[i][Vt[j]]<<"  ";
            else cout<<'r'<<-ACTION[i][Vt[j]]<<"  ";
      }
      for(int j=0;j<vn_cnt;j++)
      {
		  if(GOTO[i][Vn[j]]==ERROR) cout<<"   ";
		  else  cout<<' '<<GOTO[i][Vn[j]]<<' ';
      }
      cout<<endl;
    }

	out5<<"SLR分析表为:"<<endl;
	out5<<"    ";
    for(int j=0;j<vt_cnt;j++) out5<<Vt[j]<<"   ";  
    for(int j=0;j<vn_cnt;j++) out5<<Vn[j]<<"  ";
    out5<<endl;
    
    for(int i=0;i<c_len;i++)
    {
		if(i<10)
        out5<<i<<"  ";
		else out5<<i<<' ';
      for(int j=0;j<vt_cnt;j++)
      {
			if(ACTION[i][Vt[j]]==0) out5<<"acc";
			else if(ACTION[i][Vt[j]]==ERROR) out5<<"    ";
            else if(ACTION[i][Vt[j]]>=0) out5<<'s'<<ACTION[i][Vt[j]]<<"  ";
            else out5<<'r'<<-ACTION[i][Vt[j]]<<"  ";
      }
      for(int j=0;j<vn_cnt;j++)
      {
		  if(GOTO[i][Vn[j]]==ERROR) out5<<"   ";
		  else  out5<<' '<<GOTO[i][Vn[j]]<<' ';
      }
      out5<<endl;
    }
}


void Show_G()
{
	cout<<"所输入文法为:"<<endl;
	for(int i=0;i<g_cnt;i++)
    {
        cout<<g[i].left<<"->"<<g[i].right<<endl;
    }
	cout<<"文法中共有"<<vt_cnt<<"个终结符:   ";
    for(int i=0;i<vt_cnt;i++)
    {
        cout<<Vt[i]<<' ';
    }
	cout<<endl<<"文法中共有"<<vn_cnt<<"个非终结符:   ";
    for(int i=0;i<vn_cnt;i++)
    {
        cout<<Vn[i]<<' ';
    }
    cout<<endl<<endl;

	out2<<"此文法中共有"<<vt_cnt<<"个终结符:   ";
    for(int i=0;i<vt_cnt;i++)
    {
        out2<<Vt[i]<<' ';
    }
	out2<<endl<<"此文法中共有"<<vn_cnt<<"个非终结符:   ";
    for(int i=0;i<vn_cnt;i++)
    {
        out2<<Vn[i]<<' ';
    }
    out2<<endl;
}

void ShowItem(C temp)
{
    for(int i=0;i<temp.l;i++)
    {
        cout<<g_extend[temp.item[i]].left<<"->";
        for(int j=0;j<g_extend[temp.item[i]].l;j++)
        {
            if(j==g_extend[temp.item[i]].dot_pos) cout<<'.'<<g_extend[temp.item[i]].right[j];
            else cout<<g_extend[temp.item[i]].right[j];
        }
        if(g_extend[temp.item[i]].l==g_extend[temp.item[i]].dot_pos) cout<<'.';
        cout<<endl;
    } 
    cout<<endl;
}

void ShowItem_F(C temp)
{
    for(int i=0;i<temp.l;i++)
    {
        out4<<g_extend[temp.item[i]].left<<"->";
        for(int j=0;j<g_extend[temp.item[i]].l;j++)
        {
            if(j==g_extend[temp.item[i]].dot_pos) out4<<'.'<<g_extend[temp.item[i]].right[j];
            else out4<<g_extend[temp.item[i]].right[j];
        }
        if(g_extend[temp.item[i]].l==g_extend[temp.item[i]].dot_pos) out4<<'.';
        out4<<endl;
    } 
    out4<<endl;
}

void Show_LR0()
{
	cout<<endl<<"LR(0)项目集规范族为:"<<endl;
	for(int i=0;i<c_len;i++)
	{
		cout<<"I"<<i<<":"<<endl;
		ShowItem(c[i]);
	}

	out4<<"LR(0)项目集规范族为:"<<endl;
	for(int i=0;i<c_len;i++)
	{
		out4<<"I"<<i<<":"<<endl;
		ShowItem_F(c[i]);
	}
}

⌨️ 快捷键说明

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