亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? source.c

?? 用c語言實現的語法語義分析程序 實現了四元式得生成功能齊全
?? C
字號:
#include <conio.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <alloc.h>

struct stake1
{ char *s[15];
  int top;
} chstake;/*運算元素棧*/

struct stake2
{ char ch[20];
  int sjb[20];
  int top;
} ysstake;/*運算符號棧*/

struct lgstake1
{ char ch[10];
  int top;
}logfh;/*邏輯運算符號棧*/

struct lgstake2
{ int ysbh[10];
  int top;
}logys;/*邏輯運算元素*/

struct syshi/*四元式隊列*/
{ char *s[4];
  int bhao;
  struct syshi *next;
}yshead,*ystail;/*頭節點和尾指針*/

int sysnum,bh,logopr;/*四元式個數和臨時變量個數*/
int truelink,falselink,tchuko;

void pushys(char *stemp) /*運算元素進棧*/
{ int ln;
  ln=strlen(stemp);
  chstake.s[chstake.top]=(char *)malloc((ln+1)*sizeof(char));
  strcpy(chstake.s[chstake.top],stemp);
  chstake.top++;
}

void pushsf(char ch1,int jb)/*運算符進棧*/
{ ysstake.ch[ysstake.top]=ch1;
  ysstake.sjb[ysstake.top]=jb;
  ysstake.top++;
}

char *popys() /*運算元素出棧*/
{ char *tp;
  chstake.top--;
  tp=chstake.s[chstake.top];
  chstake.s[chstake.top]=NULL;
  return(tp);
}

char popsf() /*運算符出棧*/
{ char ctemp;
  ysstake.top--;
  ctemp=ysstake.ch[ysstake.top];
  return(ctemp);
}

void back(int t1,int t2)
{ struct syshi *temp3;
  int bh3,t0;
  bh3=t1;
  while(bh3!=0)
  { temp3=yshead.next;
    while(temp3->bhao!=bh3) temp3=temp3->next;
    sscanf(temp3->s[0],"%d",&bh3);
    sprintf(temp3->s[0],"%d",t2);
  }
}

void batch()
{ struct syshi *temp1,*temp2,*temp3;
  int bh1,bh2,bh3,i=0;
  char ch1;
  while(i<logfh.top)
  { bh1=logys.ysbh[i];
    temp1=yshead.next;
    while(temp1->bhao!=bh1) temp1=temp1->next;
    ch1=logfh.ch[i];
    if(ch1=='&')
    { bh3=truelink;
      truelink=0;
      back(bh3,bh1+2);
      sprintf(temp1->s[0],"%d",bh1+2);
      temp1=temp1->next;
      sprintf(temp1->s[0],"%d",falselink);
      falselink=bh1+1;
    }
    if(ch1=='|')
    { sprintf(temp1->s[0],"%d",truelink);
      truelink=bh1;
      temp1=temp1->next;
      bh3=falselink;
      falselink=0;
      back(bh3,bh1+2);
      sprintf(temp1->s[0],"%d",bh1+2);
    }
    i++;
  }
  temp2=yshead.next;
  bh2=logys.ysbh[logys.top-1];
  while(temp2->bhao!=bh2) temp2=temp2->next;
  sprintf(temp2->s[0],"%d",truelink);truelink=bh2;
  temp2=temp2->next;
  sprintf(temp2->s[0],"%d",falselink);falselink=bh2+1;
  logys.top=0;
}

void logysh()
{ struct syshi *temp;
  temp=ystail;
  temp->next=(struct syshi *)malloc(sizeof(struct syshi));
  temp=temp->next;
  temp->bhao=100+bh;
  logys.ysbh[logys.top++]=100+bh;
  bh++;
  temp->s[0]=(char *)malloc(8*sizeof(char));
  strcpy(temp->s[0],"----");
  temp->s[1]=(char *)malloc(2*sizeof(char));
  strcpy(temp->s[1]," ");
  temp->s[2]=(char *)malloc(8*sizeof(char));
  sprintf(temp->s[2],"if %s goto",popys());
  temp->s[3]=(char *)malloc(2*sizeof(char));
  strcpy(temp->s[3]," ");
  temp->next=(struct syshi *)malloc(sizeof(struct syshi));
  temp=temp->next;
  temp->bhao=100+bh;bh++;
  temp->s[0]=(char *)malloc(8*sizeof(char));
  strcpy(temp->s[0],"----");
  temp->s[1]=(char *)malloc(2*sizeof(char));
  strcpy(temp->s[1]," ");
  temp->s[2]=(char *)malloc(8*sizeof(char));
  strcpy(temp->s[2],"goto");
  temp->s[3]=(char *)malloc(2*sizeof(char));
  strcpy(temp->s[3]," ");
  temp->next=NULL;
  ystail=temp;
}

void yunsuan()/*產生四元式*/
{ struct syshi *temp;
  int i,j;
  char ch,ctmp[2];
  ch=popsf();
  temp=(struct syshi *)malloc(sizeof(struct syshi));
  temp->s[1]=popys();
  temp->s[0]=popys();
  temp->s[2]=(char *)malloc(8*sizeof(char));
  temp->s[2][0]=ch;temp->s[2][1]='\0';
  temp->s[3]=(char *)malloc(8*sizeof(char));
  sprintf(temp->s[3],"t%d",sysnum++);
  temp->bhao=100+bh;
  bh++;
  ystail->next=temp;
  pushys(temp->s[3]);
  temp->next=NULL;
  ystail=temp;
  if(ch=='<'||ch=='>')
  logysh();
}

int fys(char ch) /*判斷運算符級別*/
{ int jb;
  switch(ch)
  { case '^': jb=5; break;
    case '*': jb=4; break;
    case '/': jb=4; break;
    case '+': jb=3; break;
    case '-': jb=3; break;
    case '<': jb=2; break;
    case '>': jb=2; break;
    case '=': jb=1; break;
    default: jb=0;
  }
  return(jb);
}

int count;

int cffx(char *s1)
{ int len=0,length,i,judge=1,logic=0;
  int flag=0,sfjb,qt=0;/*qt代表括號嵌套層數*/
  char ch,temp[20];
  length=strlen(s1);
  ch=s1[0];
  if(ch=='-')
  { pushys(" ");
    pushsf('-',3);
    ch=s1[++len];
  }
  while(len<length&&(judge==1))
  { if(isalpha(ch))/*是字母*/
    { if(flag==1) judge=-1;
      else
      { i=0;
        while((isalpha(ch)||isdigit(ch))&&(len<length))
        { temp[i]=ch;
          ch=s1[++len];
          i++;
        }
        temp[i]='\0'; flag=1;
        pushys(temp);
      }
    }/*取表達式中的字符變量*/
    else if(isdigit(ch))/*是數字*/
    { if(flag==1) judge=-1;
      else
      { i=0;
        while(isdigit(ch)&&(len<length))
        { temp[i]=ch;
          ch=s1[++len];
          i++;
        }
        if(ch=='.')
        { temp[i++]=ch;ch=s1[++len];
          while(isdigit(ch)&&(len<length))
          { temp[i]=ch;
            ch=s1[++len];
            i++;
          }
        }/*是小數取小數部分*/
        temp[i]='\0';
        flag=1;
        pushys(temp);
      }
    }/*取表達式中的數字常量*/
    else if(ch=='(')
    { if(flag==1) judge=-1;
      else
      { pushsf('#',-100);/*符號棧進棧一個間隔*/
        i=0; ch=s1[++len];
        while((ch!=')'&&len<length)||qt>0)
        { if(ch==')') qt--;
          if(ch=='(')
          { qt++;
            count++;
          }
          temp[i]=ch;
          ch=s1[++len];
          i++;
        }
        if(ch!=')') judge=-2;/*括號不匹配*/
        else
        { temp[i]='\0';
          judge=cffx(temp);
          ch=s1[++len];
          flag=1;
          popsf();
        }
      }
    }/*處理表達式中的括號 */
    else if(ch=='&'||ch=='|')
    { if(flag==0)
      judge=-3;
      else
      { flag=0;
        logic=1;
        logfh.ch[logfh.top]=ch;
        logfh.top++;
        ch=s1[++len];
        logopr++;
      }
    }
    else
    { if(flag==0) judge=-3;/*運算符相連錯誤*/
      else
      { flag=0;
        sfjb=fys(ch);
        if(sfjb==2&&logopr>0) logopr--;
        if(sfjb==0) judge=-4;/*出現非法運算符    */
        else
        { while(sfjb<=ysstake.sjb[ysstake.top-1])/*該運算符優先級小 */
          yunsuan();/*運算產生四元式*/
          pushsf(ch,sfjb);
          ch=s1[++len];
        }
      }
    }/*運算符處理 */
  }
  while(judge==1&&(ysstake.top!=1)&&(ysstake.ch[ysstake.top-1]!='#'))
  yunsuan();
  if(logopr!=0&&(count==0))
  { logysh();
    logopr--;
  }
  if(logic&&judge==1)
  { batch();
    printf("FALSE :%4d TRUE :%4d\n",falselink,truelink);
  }
  if(count>0) count--;
  return(judge);
}


void display()
{ struct syshi *temp;
  temp=yshead.next;
  while(temp)
  { printf("%-4d %-6s %-6s %-6s %-6s\n",
    temp->bhao,temp->s[2],temp->s[0],temp->s[1],temp->s[3]);
    temp=temp->next;
  }
}

void htian()
{ struct syshi *temp;
  int tbh,bh1;
  tbh=truelink;
  while(tbh!=0)
  { temp=yshead.next;
    while(temp->bhao!=tbh) temp=temp->next;
    sscanf(temp->s[0],"%d", &tbh);
    sprintf(temp->s[0],"%d",tchuko+100);
  }
  tbh=falselink;
  while(tbh!=0)
  { temp=yshead.next;
    while(temp->bhao!=tbh) temp=temp->next;
    sscanf(temp->s[0],"%d", &tbh);
    sprintf(temp->s[0],"%d",bh+100);
   }
}

void inigtial()
{ int i;
  sysnum=0;bh=0;
  truelink=0;falselink=0;
  chstake.top=0;
  for(i=0;i<15;i++)
    chstake.s[i]=NULL;
  ysstake.top=1;
  ysstake.sjb[0]=0;
  for(i=0;i<3;i++)
    yshead.s[i]=NULL;
  yshead.next=NULL;
  ystail=&yshead;
  logfh.top=0;
  logys.top=0;
  logopr=0;
  count=0;
}

void main(){
 int i,test,control;
 char ss[20],ss2[20];
 clrscr();
 printf("CHOOSE (0)EXIT (1)TRANSLATE:");
 scanf("%d",&control);
 while(control){
   inigtial();
   printf("Input The Arithmetic Formula:");
   scanf("%s",ss);
   if(ss[0]=='i'&&ss[1]=='f'&&ss[2]=='('){
      count--;
      test=cffx(&ss[2]);
      tchuko=bh;
      scanf("%s",ss2);
      test=cffx(ss2);
   }
   else{
      test=cffx(ss);
   }
   if(test>0){
      if(logys.top!=0){
         batch();
         printf("FALSE :%4d TRUE :%4d\n",falselink,truelink);
      }
      display();
      if(truelink!=0&&ss[0]=='i'){
         printf("*****press any key to backfill*****\n");
         getch();
         htian();
         display();
      }
   }
   else{
      printf("error expression!!");
      switch(test){
         case -1: printf("error const or var!");break;
         case -2: printf("error blacket!");break;
         case -3: printf("error functor!");break;
         case -4: printf("error char!");break;
      }
   }
   getch();
   clrscr();
   printf("CHOOSE (0)EXIT (1)TRANSLATE");
   scanf("%d",&control);
 }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久精品国产一区| 久久精品理论片| 成人午夜激情影院| 久久综合视频网| 九色|91porny| 欧美r级在线观看| 亚洲一线二线三线视频| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美日韩免费一区二区三区视频 | 日韩免费观看高清完整版在线观看| 亚洲视频一区二区免费在线观看| 国产一区二区伦理| 日本一区二区三区国色天香| 国产成人av资源| 久久爱www久久做| 亚洲123区在线观看| 亚洲美女视频在线| 久久这里都是精品| 亚洲第一狼人社区| 国产女人18毛片水真多成人如厕 | 亚洲伦理在线精品| av中文一区二区三区| 国产麻豆精品久久一二三| 日韩欧美亚洲国产另类| 国产精品一卡二卡在线观看| 麻豆成人久久精品二区三区红| 欧美一区二区视频网站| 欧美丰满少妇xxxxx高潮对白| 国产一区二区在线影院| 国产日韩欧美在线一区| 99国产精品视频免费观看| bt7086福利一区国产| 色综合久久中文字幕综合网| 日韩制服丝袜先锋影音| 国产在线看一区| 国产精品毛片a∨一区二区三区| 国产乱子伦一区二区三区国色天香| 91网站最新网址| 在线免费不卡电影| 一区二区三区自拍| 欧美精品vⅰdeose4hd| 欧美一级一级性生活免费录像| 欧美色窝79yyyycom| 亚洲老妇xxxxxx| 欧美日韩大陆在线| 国产一区二区三区四区五区入口 | 欧美一激情一区二区三区| 国产精品一二三四| 国产高清在线观看免费不卡| 国产午夜精品一区二区三区视频 | 91网站视频在线观看| 石原莉奈一区二区三区在线观看| 欧美一区二区三区免费在线看| 亚洲影视资源网| 欧美精品一区在线观看| 国产精品99精品久久免费| 国产欧美一二三区| 国产成人免费在线观看不卡| 亚洲午夜在线视频| 美女在线一区二区| 亚洲私人影院在线观看| 欧洲一区二区av| 国产欧美精品一区二区色综合朱莉| 99久久精品费精品国产一区二区| 国产精品久久久久久户外露出 | 欧美亚洲高清一区| 欧美高清一级片在线| 91精品国产欧美日韩| 久久99精品久久久久久| 国产成人福利片| 日韩精品免费视频人成| 国产黑丝在线一区二区三区| 国产欧美日韩三区| 精品av综合导航| 亚洲欧美另类久久久精品| 偷拍日韩校园综合在线| 日韩美一区二区三区| 国产精品精品国产色婷婷| 亚洲aⅴ怡春院| 91麻豆精品国产91久久久久久| 中文av一区特黄| 亚洲成人一二三| 91首页免费视频| 亚洲免费电影在线| 99视频超级精品| 色诱视频网站一区| 色综合久久综合网97色综合| 欧美乱熟臀69xxxxxx| 99麻豆久久久国产精品免费| 久久99精品久久久久| 亚洲色图欧美偷拍| 蜜桃av噜噜一区二区三区小说| 国产一区二区三区精品欧美日韩一区二区三区 | 久久综合国产精品| 91免费精品国自产拍在线不卡| 久久综合色婷婷| 一区二区三区国产精华| 日韩一区中文字幕| av中文字幕一区| 欧美日韩精品欧美日韩精品一| 9l国产精品久久久久麻豆| 不卡一区在线观看| 国产成人免费视频精品含羞草妖精| 2023国产精华国产精品| 日韩电影免费在线| 日韩欧美不卡在线观看视频| 午夜久久电影网| 国产精品初高中害羞小美女文| 日本二三区不卡| 亚洲色图欧美激情| 蜜臀av性久久久久蜜臀aⅴ四虎 | 国产激情91久久精品导航| 欧美日韩中文字幕一区| 亚洲国产欧美另类丝袜| 欧美日韩一级视频| 久久不见久久见免费视频1| 久久综合久久综合久久综合| 国产精品蜜臀av| 成人黄色免费短视频| 欧美性生活大片视频| 蜜臀精品一区二区三区在线观看| 国产成人亚洲综合a∨婷婷| 久久综合九色综合97婷婷女人| 久久无码av三级| 26uuu久久天堂性欧美| 国产精品99久| 秋霞影院一区二区| 国产亚洲人成网站| 老汉av免费一区二区三区| 男人的j进女人的j一区| 日韩av一区二区在线影视| 一区二区三区波多野结衣在线观看| 美腿丝袜亚洲三区| 在线观看精品一区| 91美女片黄在线| 久久国产三级精品| 欧美日韩视频专区在线播放| 亚洲国产高清aⅴ视频| 久久精品夜色噜噜亚洲aⅴ| 日韩电影在线一区| 色综合久久88色综合天天 | 国产精品久久久久久久久快鸭 | 精品电影一区二区三区| 久久综合丝袜日本网| 久久成人免费网| 在线不卡中文字幕播放| 亚洲精品国久久99热| 91免费视频观看| 国产视频一区二区在线| 日韩成人av影视| 亚洲一区视频在线| 国产伦精品一区二区三区免费| 欧美自拍偷拍一区| 国产精品久久久久久久裸模 | 欧美一区二区大片| 亚洲欧美怡红院| 香蕉成人伊视频在线观看| 国产精品一区二区免费不卡| 在线不卡a资源高清| 亚洲天堂久久久久久久| 国产精品伊人色| 91精品一区二区三区在线观看| 一区二区三区精密机械公司| 91香蕉视频污| 亚洲色图清纯唯美| 色噜噜狠狠成人中文综合| 中文字幕一区二区三区在线播放 | 色美美综合视频| 自拍偷拍国产精品| 91视频免费播放| 一区二区三区四区不卡在线 | 日韩免费高清电影| 日韩国产一二三区| 日韩精品一区二区三区老鸭窝| 日本欧美大码aⅴ在线播放| 91精品国产麻豆国产自产在线| 亚洲aⅴ怡春院| 欧美成人精品1314www| 国产一区二区视频在线| 中文字幕免费不卡| 99久久久国产精品| 亚洲高清不卡在线| 欧美一区二区免费| 国产一区二区美女| 综合色天天鬼久久鬼色| 欧美性受极品xxxx喷水| 日本成人在线网站| 精品久久久久久久久久久久久久久 | 精品亚洲国产成人av制服丝袜| 精品国产一区久久| 国产福利一区二区三区视频| 国产精品毛片久久久久久久| 欧美性xxxxx极品少妇| 蜜臀国产一区二区三区在线播放| 久久在线免费观看| 91九色最新地址| 男男gaygay亚洲| 国产精品欧美一区二区三区| 欧美天天综合网| 国产成人精品免费看|