编译原理实验——LR分析

编译原理实验四——实现LR分析器模型的总控程序
一 LR分析器模型
在这里插入图片描述
二.具体动作
(1)移进【shift】
若ACTION[Si,a]=Sj,a为终结符,则把a移入文法符号栈,Sj移入状态栈;
(2)归约【reduce】
若ACTION[Si,a]=rj,a为终结符或#,则用第j个产生式(A->β)归约,将两个栈弹出∣β∣个元素,这时当前面临符号为第j个产生式左部的非终结符(A);若状态栈当前的栈顶状态为Sk,且GOTO[Sk,A]=j,则非终结符A移入符号栈,j移入状态栈;
(3)接受【accept】
若ACTION[Si,a]=acc,a为#,则为接受,表明分析成功;
(4)报错【error】
若ACTION[Si,a]=空白,则转向出错处理。
三.总控程序算法逻辑
在这里插入图片描述
四 总控程序代码

#include <iostream>
#include <stack>
#include <string>
#include <map>
#include <typeinfo>
#include <vector>
using namespace std;
/*
(0)E -> S
(1)S -> BB
(2)B -> aB
(3)B -> b
*/
stack<int> stateStack;//状态栈
stack<char> signStack;//符号栈
string inputS; //输入串
map<int, map<char, string> > ACTION = {
   
   
	{
   
   0,{
   
   {
   
   'a',"s3"},{
   
   'b',"s4"},{
   
   '#'," "  }}},
	{
   
   1,{
   
   {
   
   'a'," " },{
   
   'b'," " },{
   
   '#',"acc"}}},
	{
   
   2,{
   
   {
   
   'a',"s3"},{
   
   'b',"s4"},{
   
   '#'," "  }}},
	{
   
   3,{
   
   {
   
   'a',"s3"},{
   
   'b',"s4"},{
   
   '#'," "  }}},
	{
   
   4<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值