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

📄 slr1grid.h

📁 编译原理SLR(1)语法分析器
💻 H
字号:
#include "DATA.h"


int Find_G(G_EXTEND temp)
{
    for(int i=0;i<g_cnt;i++)
    {
        if(strcmp(g[i].right,temp.right)==0) return i+1;
    }
	return 0;
}

void SLR1Grid()
{
    memset(ACTION,0,sizeof(ACTION));
    memset(GOTO,0,sizeof(GOTO));
    
 /*   for(int i=0;i<128;i++)
    if(follow[i].t)
    {
        cout<<char(i)<<' '<<follow[i].t<<endl;
    }
    system("pause");*/
    for(int i=0;i<c_len;i++)
      {
         for(int j=0;j<vt_cnt;j++)
            ACTION[i][Vt[j]]=ERROR;
         for(int j=0;j<vn_cnt;j++)
            GOTO[i][Vn[j]]=ERROR;            
      }
    
    for(int i=0;i<c_len;i++)
      for(int j=0;j<c[i].l;j++)
      {
            int t=c[i].item[j];
            if(g_extend[t].left=='$' && g_extend[t].dot_pos==g_extend[t].l)
            {
                    ACTION[i]['#']=0;
            }
            else if(g_extend[t].dot_pos==g_extend[t].l)
            {
              //  cout<<t<<' '<<g_extend[t].left<<"->"<<g_extend[t].right<<endl;
                int jj=Find_G(g_extend[t]);
                for(int k=0;k<vt_cnt-1;k++)
                  if(follow[g_extend[t].left].t && (follow[g_extend[t].left].t&binary[k]) )
                  {
//                        cout<<follow[g_extend[t].left].t<<' '<<Vhash[k]<<' '<<(follow[g_extend[t].left].t&Vhash[k])<<endl;
                  //      cout<<i<<' '<<Vt[k]<<' '<<jj<<endl;
                        ACTION[i][Vt[k]]=-jj;
                  }
                if(follow[g_extend[t].left].start)  
                {
                    //cout<<i<<' '<<'#'<<' '<<jj<<endl;
                    ACTION[i]['#']=-jj;
                }
                //system("pause");
                       
            }
            else
            {
                if(g_extend[t].right[g_extend[t].dot_pos]<'A' || g_extend[t].right[g_extend[t].dot_pos]>'Z')
                {
                 /*   cout<<i<<' '<<g_extend[t].right[g_extend[t].dot_pos]<<' '<<go[i][g_extend[t].right[g_extend[t].dot_pos]]<<endl;
                    system("pause");*/
                    ACTION[i][g_extend[t].right[g_extend[t].dot_pos]]=go[i][g_extend[t].right[g_extend[t].dot_pos]];
                }
                else
                {
                    GOTO[i][g_extend[t].right[g_extend[t].dot_pos]]=go[i][g_extend[t].right[g_extend[t].dot_pos]];
                }
            }
      }
      
 
    
}

⌨️ 快捷键说明

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