编译原理实验日志

这篇博客记录了编译原理实验的过程,主要涉及SLR(1)分析表的构造,包括求解follow集和绘制DFA状态转换图。调试过程中,由于字符串限制,未出现复杂情况。
摘要由CSDN通过智能技术生成

编译原理--生成四元式

实验原理

在这里插入图片描述
在这里插入图片描述

构造SLR(1)分析表

首先求得follow集
follow(E)={#,+,-,)}
follow(T)={#,+,-,),,/}
follow(F)={#,+,-,),
,/}
画出DFA状态转换图
在这里插入图片描述

调试过程

在这里插入图片描述
没有判断
在这里插入图片描述

因为字符串中没有表示10以上的字符所以只能存之后的符号
在这里插入图片描述
最后就能得到正确答案

在这里插入图片描述

#include <stdio.h>
#include <string.h>
/**文法G[S]**/
//0 E'->E
//1 E->T
//2 E->E+T
//3 E->E-T
//4 T->F
//5 T->T*F
//6 T->T/F
//7 F->I
//8 F->(E)

//a*(b+c*(a-b))#
//a*b+c/d#


//四元式用到的全局变量
char sem[50]; //语义栈,存放id(指向标识符地址的指针)或四元式编号
int sem1=0;   //语义栈指针
char t='1';      //假设为结果集变量
char id;
char Tri[15][30];  //存放四元式
int tr=0;          //四元式集指针


//状态栈
int s1=0;
int states1[50]={
   0};
//符号栈
int f1=0;
char fuhao1[50]={
   '#'};
//输入栈
int in1=0;
char input1[50];

char flag; //定位action表或goto表中的某一个位置


//定义SLR(1)_action表
char action1[16][8]=
//数字:下一个状态集编号(10:':' 11:';' 12:'<' 13:'=' 14:'>' 15:'?') 字母:规约的产生式编号 *:结束规约
{
   //   +   -   *   /   (   )   i   #
    {
   ' ',' ',' ',' ','5',' ','4',' '}, //0
    {
   '6','7',' ',' ',' ',' ',' ','*'}, //1
    {
   'a','a','8','9',' ','a',' ','a'}, //2
    {
   'd','d','d','d',' ','d',' ','d'}, //3
    {
   'g','g','g','g',' ','g',' ','g'}, //4
    {
   ' ',' ',' ',' ','5',' ','4',' '}, //5
    {
   ' ',' ',' ',' ','5',' ','4',' '}, //6
    {
   ' ',' ',' ',' ','5',' ','4',' '}, //7
    {
   ' ',' ',' ',' ','5',' ','4',' '}, //8
    {
   ' ',' ',' ',' ','5',' ','4',' '}, //9
    {
   '6','7',
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值