• 大小: 653KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2022-10-04
  • 语言: 其他
  • 标签:

资源简介

完成以下描述算术表达式的LL(1)文法的递归下降分析程序 G[E]: E→TE′ E′→ATE′|ε T→FT′ T′→MFT′|ε F→ (E)|i A→+|- M→*|/

资源截图

代码片段和文件信息

/* 实验题目: 识别下列表达式  */
/*G[E]:   E→TE‘
          E‘→ATE‘|ε
          T→FT‘
          T‘→MFT‘|ε
          F→ (E)|i
          A→+|-
          M→*|/
*/
#include“stdio.h“
#include“malloc.h“
#include“string.h“
#include

void e();
void t();
void e_prime();
void t_prime();
void f();
bool match(char);
void advance();

char ch;
int right;
char juzi[10];
int stri=0;
int line=0;

void main(void)
{
   right=1;
   char  TOKENCL[2]string[10]cht;
   FILE *fp;
   int i=0flagflagover=0;
   while((fp=fopen(“test1.txt““r“))==NULL)
{
printf(“cannot open file!(Ctrl+C exit)\n“);
//scanf(“\n%s“filename);
}

   cht=fgetc(fp);
   while(cht!=‘\n‘){
   //while(cht!=‘\n‘)           //字符是回车时,开始新的一行检索
   do{
   cht=fgetc(fp);        
   if(isdigit(cht))
   {
    TOKENCL[0]=cht;
cht=fgetc(fp);
i=1;
if(isdigit(cht))
{
TOKENCL[i]=cht;
    i++;
    cht=fgetc(fp);
}                         //取完二元式类型
TOKENCL[i]=‘\0‘;
if((cht==‘‘)&&(strcmp(TOKENCL“10“)==0))
{
flag=1;
//flagf=1;
cht=fgetc(fp);
}
if((strcmp(TOKENCL“7“)==0||strcmp(TOKENCL“6“)==0)&&cht==‘‘&&flag==1)
{
string[stri]=‘i‘;
stri++;
}
else if(strcmp(TOKENCL“18“)==0&&cht==‘‘)
{
for(int j=0;j<2;j++)
{
cht=fgetc(fp);
}                      //跳出cht指向‘

string[stri]=cht;
stri++;
cht=fgetc(fp);
}
   if(strcmp(TOKENCL“2“)==0&&cht==‘‘)
   {
            flagover=1;
break;
   }
   if(strcmp(TOKENCL“1“)==0&&cht==‘‘)
   {
            line++;
   }

   }   
   }while(cht!=‘;‘);
   line++;
   if(flagover==0){
    string[stri]=‘#‘;
stri++;
string[stri]=‘\0‘;
flag=0;
strcpy(juzistring);
 stri=0;

    printf(“\n%s\n“juzi);
    e();
   if(right==1&&ch==‘#‘)
   printf(“ok\n“);
   else
   printf(“no\n“);

   stri=0;
   string[0]=‘\0‘;
   }
   else
   break;

   }
}

void e()
{
t();
e_prime();
}

void e_prime()
{
if(match(‘+‘)||match(‘-‘))
{
    advance();
t();
e_prime();
}

    if(!match(‘#‘)||!match(‘)‘))
return;         
    else
{
         right=0;
 printf(“第%d行有多余字符\n“line);
}
}

void t()
{
f();
t_prime();
}

void t_prime()
{
 if(match(‘*‘)||match(‘/‘))
{
advance();
f();
t_prime();
}
  else
    if( !match(‘#‘)&&!match(‘)‘)&&!match(‘+‘)&&!match(‘-‘))
{
         right=0;
 printf(“第%d行出错\n“line);
}
}

void f()
{
if(match(‘i‘))
advance();
else if(match(‘(‘))
{
advance();
e();
if(match(‘)‘))
advance();
else
{  right=0;
 printf(“第%d行出错\n“line);
}
}
else
{
right=0;
 printf(“第%d行出错\n“line);
}
}

void advance()
{
stri++;
ch=juzi[stri];
}

bool match(char comp)
{
if(comp==juzi[stri])
{
return true;
}
else
{
return false;
}
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      11232  2011-05-06 16:20  实验二\1.jpg

     文件      12633  2011-05-06 16:25  实验二\2.jpg

     文件      50176  2011-04-21 17:51  实验二\编译实验二\Debug\exp2_revise parser.bsc

     文件     180320  2011-05-26 09:27  实验二\编译实验二\Debug\exp2_revise parser.exe

     文件     198444  2011-05-26 09:27  实验二\编译实验二\Debug\exp2_revise parser.ilk

     文件      11197  2011-05-26 09:27  实验二\编译实验二\Debug\exp2_revise parser.obj

     文件     223664  2011-05-06 16:19  实验二\编译实验二\Debug\exp2_revise parser.pch

     文件     467968  2011-05-26 09:27  实验二\编译实验二\Debug\exp2_revise parser.pdb

     文件          0  2011-04-21 17:51  实验二\编译实验二\Debug\exp2_revise parser.sbr

     文件      50176  2011-05-29 20:02  实验二\编译实验二\Debug\vc60.idb

     文件      53248  2011-05-26 09:27  实验二\编译实验二\Debug\vc60.pdb

     文件       2985  2011-05-26 09:27  实验二\编译实验二\exp2_revise parser.cpp

     文件       3547  2011-05-29 20:02  实验二\编译实验二\exp2_revise parser.dsp

     文件        561  2011-05-29 20:02  实验二\编译实验二\exp2_revise parser.dsw

     文件      58368  2011-05-29 20:02  实验二\编译实验二\exp2_revise parser.ncb

     文件      48640  2011-05-29 20:02  实验二\编译实验二\exp2_revise parser.opt

     文件        270  2011-05-29 20:02  实验二\编译实验二\exp2_revise parser.plg

     文件        164  2011-05-26 09:28  实验二\编译实验二\test1.txt

     文件     564736  2011-05-28 17:21  实验二\编译实验二报告.doc

     目录          0  2011-07-08 21:59  实验二\编译实验二\Debug

     目录          0  2011-07-08 21:59  实验二\编译实验二

     目录          0  2011-07-08 21:59  实验二

----------- ---------  ---------- -----  ----

              1938329                    22


评论

共有 条评论

相关资源