学习编译原理的好东西

本文详细阐述了一种编程语言的语法结构与代码生成规则,包括声明语句、变量类型、控制结构等语法元素的定义,以及如何将这些语法元素转换为机器可执行的代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源码地址在此
规则如下:

程序 -> 声明 语句序列
声明 -> 声明 ; {声明 };
声明 -> 特殊类型 变量列表
类型限定器 ->||串
变量列表 -> 识别器 {, 识别 }
语句序列 -> 语句 { ; 语句 }
语句 -> 如语句 | 重复语句 | 赋值语句 |读语句 | 写语句| 当语句
当语句 -> 当 极式 干 语句序列 结束
如语句 -> 如 极式 随后 语句序列 [异 语句序列] 结束
重复语句 -> 重复 语句序列 直到 极式
赋值语句 -> 标识符 := 式
读语句 -> 读 标识符
写语句 -> 写 式

式 -> 极式 | 串式
极式->或式
或式->和式 {或 和式}
和式->非式 {和 非式}
非式->非 式 ||| 比较式 
比较式->算术式 比较操作 算术式
比较操作-> > | < | = | >= | <= 

算术式->{ 加操作 项}
加操作->+ | -->因子 {乘操作 因子}
乘操作-> * | /
因子-> (算术式) | 数字 | 标识符
串式 ->|标识符

生成代码规则如下:

序列->S ; 序列1
S.下个=新标签
序列1.下个=序列.下个
序列.代码=S.代码 || 标签 S.下个||序列1.代码

序列->S	S.下个=序列.下个; 序列.代码=S.代码

S->重复 序列 直到 E	

S.开始 =新标签
序列.下个=新标签
E.=S.下个;
E.=S.开始;
S.代码=标签 S.开始 || 序列.代码 || 标签 序列.下个  || E.代码

S->如 E 随后 S1 结束 	
E.=新标签;
E.=S.下个
S1.下个=S.下个
S.代码=E.代码 || 生成(E.) || S1.代码

S->如 E 随后 S1 异 S2 结束	
E.=新标签;
E.=新标签
S1.下个=S.下个;  S2.下个=S.下个;
S.代码=E.代码 || 生成(E.) || S1.代码
生成('至',S.下个) 
|| 生成(E.|| S2.代码

S->当 E 干 S1 结束	
S.开始=新标签
E.=新标签
E.=S.下个
S.下个=S.开始
S.代码=生成(S.开始)|| E.代码 || 生成(E.)|| S.代码 || 生成('至' S.开始)

E->E1 或 E2	
E1.=E.真
E.=新标签
E2.=E.真
E2.=E.假
E.代码=E1.代码 || 生成(E.) || E.代码

E->E1 和 E2	
E1.=新标签
E1.=E.假
E2.=E.真
E2.=E.假
E.代码=E1.代码 || en(E1.代码) || E2.代码

E->不 E1 	

E.=E.假
E1.=E.真
E.代码=E1.代码

E->(E1)
E1.=E.真
E1.=E.假
E.代码=E1.代码

E->标识1 相对操作 标识2
E.代码=生成('如' 标识1.名 相对操作 标识2.'至' E.|| 生成('至' E.)
E->假	E.代码=生成('至' E.)
E->真	E.代码=生成('至' E.)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值