词法、语法、语义分析结合(2)

2019-04-01 22:47

else if(5==i) { strcpy(Mnemonic,\}

else if(6==i) { strcpy(Mnemonic,\}

else if(7==i) { strcpy(Mnemonic,\}

else if(8==i) { strcpy(Mnemonic,\}

else if(9==i) { strcpy(Mnemonic,\}

else if(10==i) { strcpy(Mnemonic,\}

else if(11==i) { strcpy(Mnemonic,\}

else if(12==i) { strcpy(Mnemonic,\}

else if(13==i) { strcpy(Mnemonic,\}

else if(14==i) { strcpy(Mnemonic,\}

else if(15==i) { strcpy(Mnemonic,\}

else if(16==i) { strcpy(Mnemonic,\ }

else if(17==i) { strcpy(Mnemonic,\ }

else if(18==i) { strcpy(Mnemonic,\ }

else if(19==i) { strcpy(Mnemonic,\ }

else if(20==i) { strcpy(Mnemonic,\ } else { strcpy(Mnemonic,\ }

printf(\ )对应 %s\\n\}

/////////////////////////////////////////////////报错 void report_error (int row) {

printf(\ 无法识别的单词! In the %d row\\n\}

/////////////////////////////////////////////////////////////扫描程序

void scanner(FILE *fp)//总的判断函数开始就应该判断已读取的字符是否为空字符,不为则不用再读,直接进行判断,否则再读 {

//printf(\ int i, c;

fseek(fp,-1,1);//首先回溯一个字符,就是将文件所有的字符都在scanner内部判断,外部while循环不会浪费任何字符

ch=fgetc (fp);//scanner中要想判断字符,必须开头先读一个字符 while(' '==ch||'\\n'==ch||'\\t'==ch)//将文件中的所有空字符浪费在这里 { if('\\n'==ch)

{ row++; } ch=fgetc (fp); }

if(EOF==ch) { return;

}//必须在这里判断一下 /*if(' '==ch||'\\n'==ch||'\\t'==ch) { fseek(fp,-1,1); return; }*/ //ch=fgetc (fp); /*if(' '==ch||'\\n'==ch||'\\t'==ch) { fseek(fp,-1,1); return;//文件结束标志不能与这几个空白符作为一种情况考虑,因为文件遇到结束标志时,不能回退 }//文件指针,否则在外层的while循环中造成死循环,由此猜测fgetc函数执行的过程为,先读取 */ //当前文件指针所指的字符,再将字符指针后移!

if (isalpha (ch)) /*it must be a identifer!*/ { TOKEN[0]=ch; ch=fgetc (fp); i=1; while (isalnum (ch)) { TOKEN[i]=ch; i++; ch=fgetc (fp); } TOKEN[i]= '\\0'; fseek(fp,-1,1); /* retract*/ c=lookup (TOKEN); if (c!=6) out (c+13,TOKEN); else out (c+14,TOKEN);//此处加13或者14因为一些常量的定义产生冲突,被迫修改以适应 }

else if(isdigit(ch)|| '.'==ch) { fseek (fp,-1,1);//首先回溯一个字符,下面为了循环内部使用先读字符后判

断的格式。 int Type;

CurrentState=0; i=0; do { ch=fgetc(fp); TOKEN[i]=ch; i++; TOKEN[i]='\\0';//为随时输出字符串做准备 Type=GetChar(ch); EXCUTE (CurrentState,Type,fp,TOKEN,row,i); }while(CurrentState!=EndState); /*TOKEN[0]=ch; ch=fgetc(fp); i=1; while(isdigit(ch)) { TOKEN[i]=ch; i++; ch=fgetc(fp); } TOKEN[i]= '\\0'; fseek(fp,-1,1); out(INT,TOKEN);*/

} else

switch(ch) { case '<': ch=fgetc(fp); if(ch=='=')out(LE,\ else if(ch=='>') out (NE,\ else { //fseek (fp,-1,1); out (LT,\ } break; case '=': { ch=fgetc(fp); if('='==ch) { out(EQ, \ } else

{ //fseek (fp,-1,1); out(IS, \ } } break;

case '>': ch=fgetc(fp); if(ch=='=')out(GE,\ else { //fseek(fp,-1,1); out(GT,\ } break; case '+': { InputWordType=PL; out(PL,\ } break; case '-': { InputWordType=MI; out(MI,\ } break; case '*': { InputWordType=MU; out(MU,\ } break; case '/': { InputWordType=DI; out(DI,\ } break; case '(': { InputWordType=LB; out(LB,\ } break;


词法、语法、语义分析结合(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:区分间接故意与过于自信的过失的客观标准

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: