Processing math: 100%
祝同学们学习进步,编程快乐!
Problem 4045 --SLR(1)分析

4045: SLR(1)分析

"
Time Limit 1 秒/Second(s) Memory Limit 512 兆字节/Megabyte(s)
提交总数 880 正确数量 342
裁判形式 标准裁判/Standard Judge 我的状态 尚未尝试
难度 分类标签 编译原理

//文法:

//1S->E   //拓广文法

//2E->E+T

//3E->T

//4T->T*F

//5T->F

//6F->(E)

//7F->i

构造SLR(1)分析表,对给定的句子 进行SLR1)分析法


一个句子以#结尾
SLR(1)分的步骤
i#
1	0		#		i# 		S5
2	05		#i		# 		r6	3
3	03		#F		# 		r4	2
4	02		#T		# 		r2	1
5	01		#E		# 		acc

参考格式代码

   int i = 0;
    while (true) {
        string t = st.back();
        //assert(isdigit(t) == true);
        string y = table[stoi(t)][p[s[i]]];
        if (y[0] == 's') {
            output(st, i);
            y[0] = toupper(y[0]);
            cout << "\t\t" << y << "\n";

            st.push_back(s.substr(i, 1));//先压符号
            st.push_back(y.substr(1));//在压状态
            i++;

        } else if (y[0] == 'r') {//根据r? 归约
            output(st, i);
            int cnt = 0;
            Ga g1 = g[stoi(y.substr(1))];//要归约的产生式
            while (cnt < 2 * g1.right.size()) {//弹出 2*right.size()
                st.pop_back();
                cnt++;
            }
            string c1 = g1.left;//产生式的左部
            string y1 = table[stoi(st.back())][p[c1[0]]];//goto表
            st.push_back(c1);//先压符号 压入左部
            st.push_back(y1);//在压状态

            cout << "\t\t" << y << "\t" << y1 << "\n";

        } else if (y == "acc") {
            output(st, i);
            cout << "\t\t" << "acc" << "\n";
            break;
        } else {
            output(st, i);
            cout << "\t\t" << "error" << "\n";
            break;
        }
    }

推荐代码 查看4045 所有题解 上传题解视频得图灵币

本题记录 用 户(点击查看用户) 运行号(点击购买题解) 时 间
算法最快[1 ms] 秦文轩 1044999 2023-12-09 16:26:52
内存最少[1240 KB] 今天也白起了 1045255 2023-12-09 23:26:45
第一AC ꧁༺ 看看我的名字是不是很长 ༻꧂ 963396 2023-05-22 23:22:30
第一挑战 AOJ大管家 962840 2023-05-15 10:27:44

赛题来源/所属竞赛 N/A

竞赛编号 竞赛名称 竞赛时间 访问比赛
1825 2024-2025-1学期<编译原理> 第12-13周练习:LR(k)文法实验【22计算机12345】 2024-11-18 00:00:00 请登录
1770 2023-2024-1学期<编译原理> 第13-14周练习:LR(k)文法实验【21计算机1234】 2023-11-27 00:00:00 请登录
1748 2022-2023-2学期<编译原理> 第13-14周练习:LR(k)文法实验【20计算机12345】 2023-05-15 00:00:00 请登录
AOJ
祝同学们学习进步,编程快乐!