• PUDN用户
    了解作者
  • Visual C++
    开发工具
  • 2KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 117
    下载次数
  • 2009-11-26 10:53
    上传日期
通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。(遇到错误时可显示“Error”,然后跳过错误部分继续显示)
cifafenxi.rar
  • cifafenxi.txt
    5.2KB
内容介绍
#include<iostream.h> #include<string.h> char * KeyWord[45]={"auto","break","case","char","const","continue", "default","do","double","else","enum","extern", "float","for","goto","if","int","long","return", "short","signed","sizeof","static","struct","switch", "typedef","unsigned","void","while","catch","class", "const_cast","delete","friend","inline","new","operator", "private","protected","public","template","this", "throw","try","virtual"}; int i=0,j=0,k=0,t=0,q=0;//搜索指示器 char ch;//存放最新读入的原程序字符 char str[20];//存放构成单词符号的字符串 char * zifu[100];//字符表 char * changshu[100];//常数表 char a[1000]; int temp; void GetChar() { ch=a[k]; k++; } void GetBC() { while(ch==' ') {GetChar();} } void Concat()//将ch中的字符连接到str之后, { str[i]=ch; i++; } bool CHAR()//判断ch中的字符是否为字符 {if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))) return (1); else return(0); } bool INT()//判断ch中的字符是否为数字 {if(((ch)<='9')&&( (ch)>='0')) return (1); else return (0); } int Reserve()//对strToken中的字符串查找保留字表,若它是一个保留字则返回它的编码,否则返回-1值 {for(int q=0;q<45;q++) {if(strcmp(KeyWord[q],str)==0) return q; if(q==44) return (-1); } } void Retract()//将搜索指示器回调一个字符位置,将ch置为空白字符 { k--; ch=NULL; } char*InsertId()//将strToken中的标识符插入符号表,返回符号表的指针 { zifu[j]=str; j++; return zifu[0]; } char * InsertConst()//将strToken中的常数插入常数表,返回常数表指针 { changshu[t]=str; t++; return changshu[0]; } ////////////////////////////////////////////////////////////////////// /*识别保留字:if、int、for、while、do、return、break、continue;单词种别码为1。 其他的都识别为标识符,单词种别码为2。常数为无符号整形数,单词种别码为3。运算符包括:+、-、*、/、=、 、<、 =、<=、!= ,单词种别码为4。分隔符包括:,、;、{、}、(、), 单词种别码为5。*/ int code; void analyze() { GetChar(); GetBC(); if(CHAR()) { while(CHAR()||INT()) { Concat(); GetChar(); } Retract(); code=Reserve(); switch(code) { case -1:cout<<"(2, “"<<str<<"”)"<<endl;break; default:cout<<"(1, “"<<str<<"”)"<<endl; } } else {if(INT()) { while(INT()||ch=='.') { Concat(); GetChar(); } Retract(); cout<<"(3, “"<<str<<"”)"<<endl; } else { switch (ch) { case '=': case '/': case '%': case '*':cout<<"(4, “"<<ch<<"”)"<<endl;break; case '-': GetChar(); if(ch=='-') { cout<<"(4,“"<<"--"<<"”)"<<endl;break; } else { Retract(); cout<<"(4,“"<<"-"<<"”)"<<endl;break; } case '+': GetChar(); if(ch=='+') { cout<<"(4,“"<<"++"<<"”)"<<endl;break; } else { Retract(); cout<<"(4,“"<<"+"<<"”)"<<endl;break; } case '!': GetChar(); if(ch=='=') { cout<<"(4,“"<<"!="<<"”)"<<endl;break; } else { Retract(); cout<<"(非法符号, “"<<"!"<<"”)"<<endl;break; } case '|': GetChar(); if(ch=='|') { cout<<"(4,“"<<"||"<<"”)"<<endl;break; } else { Retract(); cout<<"(非法符号, “"<<"|"<<"”)"<<endl;break; } case '&': GetChar(); if(ch=='&') { cout<<"(4,“"<<"&&"<<"”)"<<endl;break; } case '(': case ';': case ')': case ':': case'[': case']': case '"': case'\'': case '{': case ',': case '}':cout<<"(5, “"<<ch<<"”)"<<endl;break; case '<': GetChar(); if(ch=='<') { cout<<"(4,“"<<"<<"<<"”)"<<endl;break; } else if(ch=='=') { cout<<"(4,“"<<"<="<<"”)"<<endl;break; } else { cout<<"(5,“"<<"<"<<"”)"<<endl;break; } case '>': GetChar(); if(ch=='>') { cout<<"(4,“"<<">>"<<"”)"<<endl;break; } else if(ch=='=') { cout<<"(4,“"<<">="<<"”)"<<endl;break; } else { Retract(); cout<<"(5,“"<<">"<<"”)"<<endl;break; } } } } while(k<q) { for(int p=0;p<50;p++) str[p]='\0'; i=0; analyze(); } } void main() { cout<<"请输入一段程序,以#号结束:"<<endl; a[0]=cin.get(); for(q=1;a[q-1]!='#';q++) { a[q]=cin.get(); if(a[q]=='#') { cout<<"你输入的程序段为\t"; cout.write(a,q); break; } } cout<<endl; analyze(); }
评论
    相关推荐
    • Cifafenxi.rar
      词法分析器,编译原理课程设计,有关c语言
    • cifafenxi.rar
      实现一个C语言子集的词法分析程序。 首先在关键字列表keywordtable中查询字符串p,若存在就将该字符串及对应的类号插入二元式列表eryuanshi;若没有,在符号表symtable中查询,如果symtable中不存在p就将p插入,...
    • cifafenxi.rar
      实验题目:词法分析器 一、实验目的: 设计、编制、调试一个词法分析程序-识别单词,加深对词法分析原理的理解。
    • cifafenxi.rar
      词法分析程序,VC++6.0调试成功.编译原理源程序,词法分析器程序。
    • cifafenxi.rar
      汇编语言-词法分析程序 基于C++的词法分析程序实验报告
    • 类C词法分析程序(java).rar
      java写的类C语言词法分析程序,可以应付一般的实验了
    • 词法分析
      使用java语言写的词法分析器,操作简单,代码清晰,易懂
    • 词法分析
      编译原理C++词法分析器扫描处理有穷自动机和正则表达式DFA实现
    • 非常不错的词法分析器源程序(完整的报告).rar
      用c语言写的语法分析程序; #if !defined _FENXI_H #define _FENXI_H struct CIFA //保存词法分析结果 { int nType; //0:错误, 1:标志符, 2:数字, 3-:关键字和操作符, -1:结束符 int nValue; //二元式中的值 char ...
    • qpopper2.53.tar.Z
      pop3 server