当前位置: 首页 >> 程序设计 >> C语言实现简单的Pascal词法分析器
 

C语言实现简单的Pascal词法分析器

作者:      来源:http://blog.csdn.net/qqyyhh     发表时间:2007-04-11     浏览次数:      字号:    

刚刚学过编译原理词法分析,老师布置的作业,虽然能运行成功,但总感觉程序读起来很别扭,现在贴出来,希望高手来评价一下,给点意见。

这个程序只能识别 : = , < = , < ,= = , + , * ,  ;和整数,字符串并进行输出

#include <stdio.h>
#include <string.h>
#include <ctype.h>

char ch;
FILE *fp;

identifiel()
{
 char p[10],*i;
 p[0]=ch;
 i=p;
 while(isalpha(*i)||isdigit(*i))
 {
  i++;
  *i=fgetc(fp);
  if(feof(fp))
   return;
 }
 fseek(fp,-1,SEEK_CUR);
 *i='\0';
 printf("$ID  %s\n",p);
}

number()
{
 char p[10],*i;
 p[0]=ch;
 i=p;
 while(isdigit(*i))
 {
  i++;
  *i=fgetc(fp);
  if(feof(fp))
   return;
 }
 fseek(fp,-1,SEEK_CUR);
 *i='\0';
 printf("$INT %s\n",p);
}

dictionary()
{
 ch=fgetc(fp);
 while(ch==' ')
  ch=fgetc(fp);
 if(isalpha(ch))
  identifiel();
 else if(isdigit(ch))
  number();
 else if(ch=='+')
  printf("$PLUS --\n");
 else if(ch=='*')
  printf("$STAR --\n");
 else if(ch==';')
  printf("$SEMI --\n");
 else if(ch==':')
  {
   ch=fgetc(fp);
   if(ch=='=')printf("$ASSIG --\n");
   else
    {
     fseek(fp,-1,SEEK_CUR);
     printf("$COLOL --\n");
    }
  }
 else if(ch=='<')
  {
   ch=fgetc(fp);
   if(ch=='=')printf("$LE --\n");
   else
    {
     fseek(fp,-1,SEEK_CUR);
     printf("$LT  --\n");
    }
  }
}

main()
{

 fp=fopen("file.txt","r");
 while(!feof(fp))
  dictionary();

责任编辑 webmaster

 
 
 
 
 
评论更多>>
 
 
 
发表
 
姓名: QQ:
性别: MSN:
E-mail: 主页:
评分: 1 2 3 4 5
评论内容:
验证码:
  
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •