回 帖 发 新 帖 刷新版面

主题:[原创]LR(0)自底向上语法分析程序

/*-------------------main.cpp-----------------------*/
///////////////////////////////////////////////////////
// 文法G[S']: S'->A  A->aA  A->b                     //
// 题目:LR(0)自底向上分析文法 G[S']                 //
// 作者:liuanggh                                    //
// 邮箱:liangnews@163.com                           //
// 时间:2005.11.22                                  //
//////////////////////////////////////////////////////
#include"node.h"
#include"node1.h"
#include <iostream>
#include<string>
#include <fstream>
#include <iomanip>


using namespace std;

#define n1 3      //规则的条数
#define n2 1      //非终极符的个数
#define n3 2      //终极符的个数
#define n4 10     //项目族集个数
#define left 1    //点在左边
#define middle 2  //点在中间
#define right 3   //点在右边
FILE *f;          //定义一个文件变量

linklist G[n1];       //文法的规则
linklist G_temp[n1];  //文法的规则副本
string N[n2];         //非终结符     
string T[n3];         //终结符
linklist I[n4];       //项目集
linklist i_temp[n4];  //项目集副本
stack S;              //分析栈
string line;
enum VT{a,b,O};
enum VN{A};
node item[n4];        //项目
int number = 1;       //计数器  

struct Form       
{
    string first;
    int second;
};    
struct Form ACTION[5][3];              //action表
int GOTO[5] = {0};                     //goto表

struct Form_dfa
{
    string first;                      //字母
    int second;                        //ID号
    int flags;                         //有效标志位
};        
struct Form_dfa DFA[5][5];             //G[S']活前缀的DFA
void closure(node*);                   //生成新的项目集
void GO(linklist&, string);            //生成新的项目集族
node *check(linklist &l, string s);    //生成新的项目
node *DFA_check(linklist &l, string s);//生成新的项目    
void Init();                           //数据初始化部分
bool Same_check(node&, node*);         //查找是否有相同的项目
void new_item(int j,node *pp);         //生成I0后面的项目集
void make_DFA();                       //构造 G[S']活前缀的DFA
void make_ActionForm();                //填写action表
void make_GotoForm(linklist &l);       //填写goto表
bool control();                        //语法分析主控程序
void copy_item(linklist&,linklist&);   //复制

回复列表 (共11个回复)

11 楼

程序写得不够完整,希望大家多多指点!

我来回复

您尚未登录,请登录后再回复。点此登录或注册