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

📄 rrtbl.cpp

📁 中科院开源的ictprop源码,使用方法: 1、修改源码中的InputComboBox.cpp文件 InvokeAction里面的txt文件路径换成你的本地路径; 2、入口在帮助里面
💻 CPP
字号:
#include "stdafx.h"
#include "error.h"
#include "symbol.h"
#include "symbtbl.h"
#include "grmrgrph.h"
#include "rrtbl.h"

unsigned int *rolestring;
unsigned int *postfixstring;
int rrready;
rr_tbl_entry_t *rr_tbl;

expecini(void){
  rolestring=(unsigned int *)calloc(arccount+2, sizeof(unsigned int));
  postfixstring=(unsigned int *)calloc(arccount+2, sizeof(unsigned int));
  return 0;
}

expecrelease(void){
  free(rolestring);
  free(postfixstring);
  rolestring=NULL;
  postfixstring=NULL;

  return 0;
}

rrini(void){
  int scan, totaldim=tcount*(tntcount-1);

  EGEN
  ((rr_tbl=(rr_tbl_entry_t *)
   calloc(totaldim, sizeof(rr_tbl_entry_t)))==NULL, MEMFUL, return -1;)

  for (scan=0;scan<totaldim;scan++){
      rr_tbl[scan].lrr=NULL;
      rr_tbl[scan].rrr=NULL;
  }

  return 0;
}

rrrelease(void){
  int scan, totaldim=tcount*(tntcount-1);
  rulrol_struct *prr, *qrr;

  if (rr_tbl==NULL)
     return 0;

  for (scan=0;scan<totaldim;scan++){
     for (prr=rr_tbl[scan].lrr;prr!=NULL;prr=qrr){
         qrr=prr->nxt;
         free(prr);
     }
     for (prr=rr_tbl[scan].rrr;prr!=NULL;prr=qrr){
         qrr=prr->nxt;
         free(prr);
     }
     rr_tbl[scan].lrr=NULL;
     rr_tbl[scan].rrr=NULL;
  }
  free(rr_tbl);
  rr_tbl=NULL;

  return 0;
}


listrr(void){
  unsigned int term, sym, totalsym=tntcount-1;

  for (term=0; term<tcount; term++){
      for (sym=0; sym<totalsym; sym++){
          rr_tbl_entry_t rr_tbl_entry=rr_tbl[term*totalsym+sym];
          rulrol_struct *prr;

        
		  printf("( %s, %s ):\n", 
          sym>=(tcount-1)?
          code2ntnode(sym+1)->literal:
          code2tnode(sym+1)->literal, 
          code2tnode(term)->literal);
          
          printf("lrr:");
          for (prr=rr_tbl_entry.lrr;prr!=NULL;prr=prr->nxt)
               printf("%d.%d %s%d/", prr->rule, prr->role, 
                      prr->expmode=='s'?"shift":"reduce", 
                      prr->expsymb);
          printf("\n");
          printf("rrr:");
          for (prr=rr_tbl_entry.rrr;prr!=NULL;prr=prr->nxt)
               printf("%d.%d %s%d/", prr->rule, prr->role, 
                      prr->expmode=='s'?"shift":"reduce", 
                      prr->expsymb);
          printf("\n");
      }
      printf("################################################\n");
  }
  return 0;
}

⌨️ 快捷键说明

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