【司马编译器】“命名空间”分析
司马中实现了一种叫作“线锁”的结构,线锁把结构体的定义头链在一起,逻辑上可以把它看作是树形结构。这种结构可以把诸如结构体变量属性的引用简化为一个线性遍历过程。当分析某个结构体变量语义时可以在线锁中搜索,上例中的结构体“定义头”a是线锁父节点,其余b、c、d、e、d都它在的线锁上,该规则可以推广到任意满足这个特性的结构体定义头上,例如上例的定义头c是a的递归,它的基本性质跟a相同。
C语言规定,凡是出现在分析树同一层次上的结构体定义头必须是唯一的。这个语义可以用线锁号来实现。
为了生成线锁号,我们必须先为每个节点编号,C语言的语法分析器是预测分析算法,从遍历分析树的方向来看是先根遍历,节点编号号可以在遍历分析树的时候生成。有了节点编号之后分析器就可以生成节点的线锁号了,某个节点的线锁号是它的父节点的编号,如下图所示:
对于结构体的定义头命名空间分析只需要比较线锁号即可,当一个定义头名称相同并且线锁号也相同时,说明出现了语义错误。运行效果如下:
司马编译器:
开发:
项目地址:
http://gforge.osdn.net.cn/projects/unixtok/
struct a{
struct b{};
struct c{
struct d{};
struct e{};
};
struct d{};
};
【司马编译器】“命名空间”分析相关推荐
- 【开源】司马编译器 Smart Compiler
输入: int gtkings(int a,int a2){} int main() { gtkings(gtkings(1,2),gtkings(1)) + 1; int a = 0x; in ...
- 【开源】司马编译器结构
编译器前段部分:源代码经过预处理模块处理之后,剔除了一些空格,跟注释,把源代码重新组织给了词法分析器,词法分析器处理后形成了记号流,记号(终结符.非终结符)被存放到了词法表中.语法分析器根据词法表中的 ...
- 【开源】司马编译器 Smart Compiler 符号表
整个编译过程,编译器需要不断地保存并修改从源代码中获取的各种数据,符号表的重要性越是接近后端越明显.在不同的编译器实例中,开始使用符号表的"时机"都不相同,选择什么时机去使用符号表 ...
- 三国志战略版:Daniel_S2司马盾阵容分析
一.魏盾发展简述 司马懿作为历史上的魏国重臣,文功武治皆闻名遐迩.游戏中同样,作为S2的明星武将,立刻促成一批新魏国明星阵容,其中的司马魏盾可以说是经历了大量战斗的考验,成为S2魏国阵容的顶尖队伍. ...
- 三国志战略版:Daniel_S6新武锋_司马魏枪
一.前言 在武锋阵更新改动之后,在下终于能够将之前司马魏枪的想法落实.新的武锋阵,等于是明确地告诉了我们,要走后4回合输出的路子,不然你是吃不到最终增伤加成的.吃不到等于没有,没有那就不如带别的.因此 ...
- 《女侦探司马楠之箱尸谜案》横店开机 花潼冯荔军热血联手破奇案
由星脉影视.麦田映画出品,浙江画风影业有限公司.阿达影业(北京)有限公司.东阳市阡陌影视文化有限公司.浙江御林影际影视文化有限公司.浙江龙威影视文化有限公司联合出品的民国悬疑推理电影<女侦探司马 ...
- 【历史上的今天】6 月 15 日:第一个手机病毒;AI 巨匠司马贺诞生;Chromebook 发布
整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 6 月 15 日,在 1911 年的今天,美国三家公司在纽约合并成 IBM 公司的前身 CTR 公司 ...
- 司马南点火下的联想困局:始于业务,止于人事
联想面临的舆论困局,让人想起<诗经>那句千古回荡的感慨,"靡不有初,鲜克有终". 个人对联想,研究不多,谈不上喜欢或反感,只是觉得有点可惜,感慨,因为联想与我同龄.个人 ...
- “五胡乱华”是两汉和曹魏埋下的隐患,为何后世只骂司马家?
"五胡乱华"是两汉和曹魏埋下的隐患,为何后世只骂司马家? "五胡乱华"是指在中国历史上五胡十六国时期,五个少数民族在中原地区建立了一系列政权,对中国的政治.经济 ...
最新文章
- 22 款神经网络的设计和可视化工具
- 公有云还能信任吗?Azure遭雷击中断超过一天
- jenkins+github+docker+maven自动化构建部署
- druid seata 配置_五分钟带你了解Seata分布式事务
- Android基础_1 四大基本组件介绍与生命周期
- c语言 炸弹文件,炸弹超人游戏c语言简板
- 苹果年底推出搭载M2芯片MacBook Air和MacBook Pro
- java集合类的框架图_Java集合框架01-框架总览
- solr 配置多个entity_solr建索引优化
- 分享,iOS国家手机区号代码.plist
- Intent.parseUri()详解
- grep的-A-B-选项详解
- 标准日本语初级 语法整理
- ThinkPad E40无线网卡驱动安装 FOR CENTOS6.3
- 数据结构课程设计---商品销售管理系统C/C++
- 使用strlen函数的常见错误
- 数字农业农村解决方案(ppt可编辑)
- oracle11g dataguard中standby库文件坏块的修复过程
- 拍立淘Open SDK-在你的App里用相机连接淘宝和世界
- 给idea换背景图片与背景颜色