实验3-源文件(g.cpp+subg.h+subg.cpp+test.cpp)

原创 2005年04月28日 14:55:00

//g.cpp

//实验一:设计文法的数据结构

#include<string.h>
#include<iostream.h>

typedef struct Snode{
 char* s;
 struct Snode *nexts;
}Snode;

typedef struct Cnode{
 char c;
 struct Cnode *nextc;
 struct Snode *define;
}Cnode;

class G{
 public: 
  Cnode *vn,*vt,*s,*p;
  
  G(){
   vn=0;
   vt=0;
   s=0;
   p=0;
  }

  void insert_into_vn(char newc){
   Cnode *p;
   Cnode *lastvn;
   p=new Cnode;
   p->c=newc;
   p->nextc=0;
   p->define=0;
   if(!vn){
    vn=p;
    set_s(vn);
    set_p(vn);
   }else{
    lastvn=vn;
    while(lastvn->nextc)
     lastvn=lastvn->nextc;
    lastvn->nextc=p;
   }
  }

  void insert_into_vt(char newc){
            Cnode *p;
   Cnode *lastvt;
   p=new Cnode;
   p->c=newc;
   p->nextc=0;
   p->define=0;
   if(!vt)
    vt=p;
   else{
    lastvt=vt;
    while(lastvt->nextc)
     lastvt=lastvt->nextc;
    lastvt->nextc=p;
   }   
  }

  void insert_into_s(char leftvn,char* rights){
   Cnode* pc;
   Snode *ps,*lasts;
   ps=new Snode;
   ps->s=rights;
   ps->nexts=0;
   pc=find_char_inq(vn,leftvn);
   if(!pc){
    insert_into_vn(leftvn);
    pc=find_char_inq(vn,leftvn);
   }
   lasts=pc->define;
   if(!lasts)
    pc->define=ps;
   else{
    while(lasts->nexts) lasts=lasts->nexts;
    lasts->nexts=ps;
   }
  }

  void set_s(Cnode* nows){
   s=nows;
  }

  void set_p(Cnode* nowp){
   p=nowp;
  }
  
  Cnode* find_char_inq(Cnode* q,char c){
   Cnode* p=q;
   if(!p) return 0;
   while(p&&p->c!=c)
    p=p->nextc;
   if(!p) return 0; else return p;
  }

  void printG(){
   Cnode *pc;
   Snode *ps;
   pc=vn;
   while(pc){
    cout<<pc->c<<"->";
    ps=pc->define;
    while(ps){
     cout<<ps->s;
     ps=ps->nexts;
     if(ps) cout<<"|";
    }
    cout<<"/n";
    pc=pc->nextc;
   }

  }
};

//subg.h

#include<fstream.h>
#include "g.cpp"

class sub_G:public G{//此类的实现在文件subg.cpp中
public:
 void read_G_from(ifstream &infile);
 //此函数用于将文法从文件输入流infile读入到本类对象中
 
 void write_G_to(ofstream &outfile);
 //此函数用于将本对象表示的文法写入到文本文件的输出流outfile中

 int remove_leftDG();
 /*本对象文法左递归消除函数
   实现方法参考书中70页算法,
   在此处用C++实现书中算法即可*/


};

//subg.cpp

#include"subg.h"

void sub_G::read_G_from(ifstream &infile){
 
}

void sub_G::write_G_to(ofstream &outfile){
 
}

int sub_G::remove_leftDG(){
 //
 return 0;
}

//test.cpp

#include<iostream.h>
#include"subg.h"

void main(){
 //利用此处main函数实现实验3测试。
}

第五十七篇:VS2015建立一个完整的c++工程:头文件.h 源文件.cpp,自动生成类

菜鸟一枚,之前一直在vs中一个源程序写到底,没有使用C++变成 打开VS2015 ,新建VS win32工程,前面步骤很简单,不再阐述 下面直接开始: 新建一个VC++ win32的程序, 在源文件加...

C++源文件的后缀名问题(关于.h,.hh,.hpp,hxx . .cpp,.c,.cc,.cxx 一些小知识)

C++源文件的后缀名问题 VC里用cpp作后缀名, 在GCC里默认采用C、cc、cxx作为后缀名 .cpp, .h (VS file) .cc, .h (GCC file)  ...

无法打开包括文件: “ui_mainwindow.h”和源文件“GeneratedFiles\Debug\moc_mainwindow.cpp”

打开别人给的工程代码出现以下错误: (1)C1083 无法打开源文件: “GeneratedFiles\Debug\moc_mainwindow.cpp”: No such file or d...

C++中头文件(.h)和源文件(.cpp)都应该写些什么

原文地址: http://blog.csdn.net/lyanliu/article/details/2195632    这个问题在许多C++程序员看来会很搞笑,“这...

C++中头文件(.h)和源文件(.cpp)都应该写些什么

之前总是好奇为什么人家的程序总是可以有那么多的文件,并且主文件只有一点点,其他的函数都可以写在对应的头文件里,这篇转载文章可以初步帮助理解头文件的作用...

头文件.h与源文件.cpp

这个问题在许多C++程序员看来会很搞笑,“这么简单的问题还用得着你废话!”。但是由于本人生性愚钝,学C++的时候,确实花了很久的时间都搞不明白,只是会写一个文件,但不会写一个工程。而用C++编写比较大...

C++中头文件(.h)和源文件(.cpp)都应该写些什么

头文件(.h):     写类的声明(包括类里面的成员和方法的声明)、函数原型、#define常数等,但一般来说不写出具体的实现。     在写头文件时需要注意,在开头和结尾处必须按照如下样式加上...

【学习C++】C++类中头文件(.h)和源文件(.cpp)都应该写些什么(计算圆形面积)

转载于 http://blog.sina.com.cn/s/blog_6d30debd0100sx16.html 头文件(.h):     写类的声明(包括类里面的成员和方法的声明)、函数原型、...
  • KYJL888
  • KYJL888
  • 2017年12月06日 12:49
  • 19

C++ - 头文件(.h)和源文件(.cpp)都应该写些什么

转自:http://www.cppblog.com/lhking/a 这个问题在许多C++程序员看来会很搞笑,“这么简单的问题还用得着你废话!”。 但是由于本人生性愚钝,学C++的时候,确实花了很久的...

C++中头文件(.h)和源文件(.cpp)都应该写些什么

头文件(.h):     写类的声明(包括类里面的成员和方法的声明)、函数原型、#define常数等,但一般来说不写出具体的实现。     在写头文件时需要注意,在开头和结尾处必须按照如下...
  • xdf191
  • xdf191
  • 2016年03月25日 20:49
  • 300
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:实验3-源文件(g.cpp+subg.h+subg.cpp+test.cpp)
举报原因:
原因补充:

(最多只允许输入30个字)