//文法:
//(1)S->E //拓广文法
//(2)E->E+T
//(3)E->T
//(4)T->T*F
//(5)T->F
//(6)F->(E)
//(7)F->i
构造SLR(1)分析表,对给定的句子 进行SLR(1)分析法
| Time Limit | $1$ 秒/Second(s) | Memory Limit | $512$ 兆字节/Megabyte(s) |
| 提交总数 | $880$ | 正确数量 | $444$ | "
| 裁判形式 | 标准裁判/Standard Judge | 我的状态 | 尚未尝试 |
| 难度 | 分类标签 | 编译原理 |
//文法:
//(1)S->E //拓广文法
//(2)E->E+T
//(3)E->T
//(4)T->T*F
//(5)T->F
//(6)F->(E)
//(7)F->i
构造SLR(1)分析表,对给定的句子 进行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;
}
}
| 本题记录 | 用 户(点击查看用户) | 运行号(点击购买题解) | 时 间 |
|---|---|---|---|
| 算法最快[$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 |
| 竞赛编号 | 竞赛名称 | 竞赛时间 | 访问比赛 |
|---|---|---|---|
| 1873 | 2025-2026-1学期<编译原理> 实验5:LR(k)文法实验【23计算机1234】 | 2025-11-13 00:00:00 | 请登录 |
| 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 | 请登录 |