目录一、文法二、SLR 分析表三、运行环境四、输入输出设计五、主要数据结构六、核心算法七、测试一、文法 原文法 E->E+T|E-T|T T->T*F|T/F|F F
原文法
E->E+T|E-T|T
T->T*F|T/F|F
F->id|(E)|num
其中: id: a-f, A-F,num:0-9
拓广文法
(0)S->E
(1)E->E+T (2)E->E-T (3)E->T
(4)T->T*F (5)T->T/F (6)T->F
(7)F->i (8)F->(E) (9)F->n
其中:i:id, n:num
CodeBlocks-13.12 with GCC compiler from TDM-GCC (4.7.1, 32 bit)
输入:文件“fin.txt”输入待分析串
输出:SLR 分析过程输出至“fout.txt”
// 拓广文法的产生式
vector<string> G;
// 文法符号到下标的转换字典
map<char, int> index;
// SLR action 表
vector<vector<int> > action;
// SLR Goto 表
vector<vector<int> > goTo;
int main()
{
从文件 fin.txt 读取待分析串到 s;
s末尾加‘$';
状态栈 vector<int> statusStack;
符号栈 vector<char> symbolStack;
状态栈 0;符号栈压‘$';
ip 指向 s 的第一个字符;
do{
top 是栈顶符号;
cur 是 ip 所指向的输入符号;
if(cur 是字母) cur = ‘i';
if(cur 是数字) cur = ‘n';
x = top 对应下标;
y = cur 对应下标;
动作 val = action[x][y];
if(val == acc){
输出 acc;
break;
}
else if(val 为 shift){
输出 shift;
当前输入符号 cur 压入符号栈;
动作 val 压入状态栈;
}
else if(val 为 reduce){
len = reduce 产生式右部长度;
状态栈和符号栈各弹出 len 个;
topS = 当前状态栈栈顶;
curA = 产生式左部非终结符号;
x = topS 对应下标;
y = curA 对应下标;
curA 压入符号栈;
goto[x][y]压入状态栈;
输出 reduce 产生式;
}
else{
error;
break;
}
}while(true);
}
到此这篇关于用c++实现SLR语法分析程序的文章就介绍到这了,更多相关C++实现SLR语法分析内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: 用C++实现SLR语法分析程序
本文链接: https://www.lsjlt.com/news/138199.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
一口价域名售卖能注册吗?域名是网站的标识,简短且易于记忆,为在线用户提供了访问我们网站的简单路径。一口价是在域名交易中一种常见的模式,而这种通常是针对已经被注册的域名转售给其他人的一种方式。
一口价域名买卖的过程通常包括以下几个步骤:
1.寻找:买家需要在域名售卖平台上找到心仪的一口价域名。平台通常会为每个可售的域名提供详细的描述,包括价格、年龄、流
443px" 443px) https://www.west.cn/docs/wp-content/uploads/2024/04/SEO图片294.jpg https://www.west.cn/docs/wp-content/uploads/2024/04/SEO图片294-768x413.jpg 域名售卖 域名一口价售卖 游戏音频 赋值/切片 框架优势 评估指南 项目规模
0