• 大小: 296KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2022-11-23
  • 语言: 其他
  • 标签:

资源简介

词法分析器、语法分析器、语义分析器的简单程序

资源截图

代码片段和文件信息

#include      /*定义I/O库所用的某些宏和变量*/
#include     /*定义字符串库函数*/
void scaner();
char prog[80]token[8];
char ch;
int synpmnsum;   /*p是缓冲区prog的指针m是token的指针*/
char *rwtab[6]={“begin““if““then““while““do““end“};
void main()
{   char flag=‘r‘;  int count;
    while(flag == ‘r‘)
{   for(n=0;n<80;n++)  prog[n]=NULL;
    p=0; 
printf(“\n 请输入源程序字符串(以#号结束): \n“); 
printf(“ “);
count=1;
    do{ 
ch=getchar(); 
if(count==1)
{ if(ch!=‘\n‘) { prog[p++]=ch; } }
else
{ prog[p++]=ch;  } //*输入源程序字符串,送到缓冲区prog[p++]中;*/
count++;
}while(ch!=‘#‘);
        p=0;
    printf(“\n 经词法分析后输出的二元组序列: \n“);
        do
{  scaner();    
           switch(syn)
   {
       case 11: printf(“ (%d%d)“synsum); break;/*输出(数的二元组);break;*/
       case -1: printf(“ error“); break;  /*输出(错误);break;*/
       default: printf(“ (%d%s)“syntoken); /*输出(其他单词二元组);*/
   }
}while(syn!=0);    
        printf(“\n\n 返回请选择‘r‘退出请选择其他:\n“);  
        printf(“ “);scanf(“%s“&flag);  
}
    printf(“\n“);
}
/////////////////////////////////////////////////////////////////////////////
void scaner()
{  for(n=0;n<8;n++) token[n]=NULL; 
    ch=prog[p++];  /*读下一个字符;*/
while(ch == ‘ ‘) ch=prog[p++]; /*读下一个字符;*/
if((ch>=‘a‘&&ch<=‘z‘)||(ch>=‘A‘&&ch<=‘z‘)) /*ch是字母字符*/
{   m=0;
while((ch>=‘a‘&&ch<=‘z‘)||(ch>=‘A‘&&ch<=‘z‘)||(ch>=‘0‘&&ch<=‘9‘))/*ch是字母字符或数字字符*/
{  token[m++]=ch;
   ch=prog[p++];  /*读下一个字符;*/
}
token[m++]=‘\0‘; ch=prog[--p];  /*回退一个字符;*/
    syn=10;
for(n=0;n<6;n++)
if(strcmp(tokenrwtab[n]) == 0)
{  syn=n+1;   /*给出syn值;*/
  break;
}
}
else 
if(ch>=‘0‘&&ch<=‘9‘)  /*ch是数字字符*/
{   m=0; sum=0;
while(ch>=‘0‘&&ch<=‘9‘)  /*ch为数字字符*/
{  sum =sum*10+ch-‘0‘;
   ch=prog[p++];   /*读下一个字符;*/
}
    token[m++]=‘\0‘; ch=prog[--p]; /*回退一个字符;*/
syn=11;
}
    else
switch(ch)
{  
case‘<‘: m=0; token[m++]=ch;
                 ch=prog[p++];   /*读下一个字符;*/
         if(ch == ‘>‘)
 {  syn=21;
                    token[m++]=ch;  token[m++]=‘\0‘;
 }
            else if(ch==‘=‘)
 {  syn=22;
                    token[m++]=ch;  token[m++]=‘\0‘;
 }
           else
 {  syn=20; token[m++]=‘\0‘;  ch=prog[--p];/*回退一个字符;*/}
         break;
case‘>‘: m=0; token[m++]=ch;
     ch=prog[p++];  /*读下一个字符;*/   
     if(ch == ‘=‘)
 {  syn=24;
    token[m++]=ch;   token[m++]=‘\0‘; 
 }
 else
 {  syn=23;
    token[m++]=‘\0‘; ch=prog[--p]; /*回退一个字符;*/
 }
 break;
case‘:‘: m=0;  token[m++]=ch;
     ch=prog[p++];   /*读下一个字符;*/   
     if(ch == ‘=‘)
 {  syn=18;
    token[m++]=ch;
 }
 else
 {  syn=17;
    token[m++]=‘\0‘; ch=prog[--p];/*回退一个字符;*/
 }
 break;
case‘+‘: syn=13;token[0]=ch;break;
        case‘-‘: syn=14;token[0]=ch;break;
case‘*‘: syn=15;token[0]=ch;break;
        case‘/‘: syn=16;token[0]=ch;break;

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

     文件     198144  2009-06-02 22:58  语义分析\语义分析.doc

     文件       7954  2009-06-02 21:49  语义分析\语义分析.cpp

     文件       3441  2009-06-02 22:08  词法分析\词法分析.cpp

     文件     124928  2009-06-02 22:27  词法分析\词法分析.doc

     文件     168448  2009-06-02 22:29  语法分析\语法分析.doc

     文件       5127  2009-06-02 22:21  语法分析\语法分析.cpp

     目录          0  2009-06-02 23:53  语义分析

     目录          0  2009-06-02 23:53  词法分析

     目录          0  2009-06-02 23:53  语法分析

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

               508042                    9


评论

共有 条评论

相关资源