lr0文法分析表示例_LR(0)文法分析程序

本文档介绍了LR(0)文法分析,并提供了详细的示例。首先,展示了LR(0)文法,然后通过扩展文法进行分析。接着,解释了如何创建有限状态自动机和LR(0)分析表。最后,给出了分析字符串的流程,并提供了相关函数实现,如求后继状态集、闭包等,以帮助理解LR(0)解析过程。
摘要由CSDN通过智能技术生成

LR(0)文法如下:

G[E]:

E→aA∣bB

A→cA∣d

B→cB∣d

改写为扩展文法后进行分析。

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

//初始化,包括读取文件中的文法及初始化

void init();

//创建文法的有限状态自动机,并以表格形式打印到屏幕

void creatFA();

//创建文法的LR(0)分析表,并以表格形式打印到屏幕

void creatLRTable();

//分析字符串是否为合法字符串,并以表格形式输出分析过程

void analysis();

//打印单步分析过程

void printline(int i, vector

state, vector sign, string s,

string action, int nextstate);

//求出后继状态集

vector

follow(vector s, char

x);

//求出闭包

vector

closure(vector s);

//具体分析过程,根据栈顶符号和余留字符串得出下一状态

string getAction(int &step,

vector &state,

vector &sign,

string &temp, int

&nextstate);

//判断str是否在集合s中

bool isContained(vector s,

string str);

//判断符号c是否为终结符号

bool isVt(char c);

//判断状态s是否已在项目规范族中

int isInstatus(vector

s);

//获取符号id

int getId(char c);

//获取产生式s的id

int getIdinP(string s);

vector itemsets; //项目集

vector p; //产生式集

vector vn, vt;

//终极符号集、非终结符号集

vector>

status; //项目集规范族

vector>

GO; //状态转移表

int** table; //LR(0)分析表

char** secondtable; //LR(0)辅助分析表

示例:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值