LR分析器

LR语法分析

LR简要的介绍:

LR分析是一种自底向上的进行规范规约的语法分析方法,L:自左向右扫描R:自底向上的进行规约。

实验原理:

LR分析器基本思想:

1-记住历史--记住已经移进和规约整个符号串

2-展望未来--根据产生式推测未来可能遇到的输入符号

3-认情现实--根据现实所输入的字符串确定栈顶符号是否构成产生式的句柄

LR分析表是 LR分析器核心分, 包括一张ACTION GOTO表。

具有移进、规约、接受、报错 4个动作

本实验的的文法是G[E]:E->E+E | E*E | (E) | i , 基于编译原理教材的P90 3.21 如图:

 

代码:

#if 1
/*
作者:何文官  
SLR(1)来源:编译原理  第三版 P90 表3.21
  BUG 已经解决;
       总结:规约:1-符号栈  POP(原来栈顶符号)  PUSH(规约的左部)
   2-状态栈  POP(当前的栈顶符号) 规约几个右部就POP几个
   3-新的状态 = 查GOTO(状态栈顶,符号栈顶的元素)
   4-PUSH(新状态)
 
     移进:1- 新状态 = 查表ACTIONG(当前状态栈顶,输入串)
   2- 状态栈 PUSH(新状态)
   3- 符号栈 PUSH(输入串当前字符)
*/
#include<iostream>
#include<malloc.h>
 
using namespace std;
 
int action[10][7]={  //ACTION 的二维数组 
    { 3 , -1 , -1 , 2  , -1 , -1 , 1  },
    {-1 , 4  ,  5 , -1 , -1 , 44 , -1 },
{ 3 , -1  , -1 , 2 , -1 , -1 , 6 },
{ -1 , 104  , 104 , -1 , 104 , 104 , -1 },
{ 3 , -1  , -1 , 2 , -1 , -1 , 7 },
{ 3 , -1  , -1 , 2 , -1
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值