设为首页 加入收藏

TOP

PL/0语言词法分析程序
2014-11-23 20:29:18 】 浏览:418
Tags:PL/0 语言 词法 分析 程序

  //这是我编译原理的一次作业,中间有许多不足之处希望大家指正


  /*编写PL/0语言的词法分析程序


  要求:
  1、读入用PL/0语言编写的源程序,正确的进行词法分析,并输出二元式序列。
  2、若源程序有词法错误,能够给出出错的准确位置。
  3、词法代号如下
  (+,+);
  (-,-);
  (*,*);
  (/,/);
  ((,();
  (),));
  (,,,);
  (;,;);
  (.,.);
  (#,#);
  (=,=);
  (>,>);
  (<,<);
  (:=,a);
  (>=,b);
  (<=,c);
  (数字,d);
  (标识符,e);
  关键字代号:
  (begin,f);
  (call,g);
  (const,h);
  (do,i);
  (end,j);
  (if,k);
  (odd,l);
  (procedure,m);
  (read,n);
  (then,o);
  (var,p);
  (while,q);
  (write,r);
  4、等于运算符号为一个 =


  测试程序:


  A.C
  ======================
  CONST A=10;
  VAR B,C;
  PROCEDURE P;
  VAR D;
  PROCEDURE Q;
  VAR X;
  BEGIN
  READ(X);
  D:=X;
  WHILE X<0
  DO CALL P;
  END;
  BEGIN
  WRITE(D);
  CALL Q;
  END;
  BEGIN
  CALL P;
  END.


  */


  /*program name:chifufenxi*/


  /*作者:小万 QQ:421404493*/


  /*date:2004.10.11*/


  #include
  #include
  #include
  #include
  #include
  
  #define N 256//每一行的字符数不能超过256个
  
  char buffer[N]; //用作存放一行字符


  char word[20]; //用作存放经过分析单词


  char *kword[13]={"begin","call","const","do","end","if","odd","procedure","read","then","var","while","write"};


  char ktype[13]={'f','g','h','i','j','k','l','m','n','o','p','q','r'};


  int len;//记录每一行的长度


  int count=0;//用来记录行数


  void write(char *wstr,char wc,FILE *wout)//将分析结果按照规则写入到文件
  {
  fputc('(',wout);
  fputs(wstr,wout);
  fputc(',',wout);
  fputc(wc,wout);
  fputc(')',wout);


  }
  int readbuffer(FILE *fp)
  {
  char ch;
  len=0;
  ch=fgetc(fp);
  while(!feof(fp) && ch!='\n')//读取字符到缓冲区
  {
  buffer[len]=ch;
  ch=fgetc(fp);
  len++;
  }
  
  len--;//用来控制词法分析时行分析中字母的个数
  
  if(feof(fp))//标志文件是否结束
  return 0;
  else
  return 1;


  }
  void error(int type)
  {


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇万年历,可查看任何日期对应的星期 下一篇一个简单易懂的时钟程序

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目