c语言语义,语义分析的C语言代码

之前写了12篇使用有限自动机(DFA)分析语法的文章,今天说一下语义分析。

怎么用C语言写语法分析3,基于有限自动机的表达式分析

怎么用C语言写语法分析

用C语言实现一个真正的词法分析器

语义分析,也是编译器前端的一个模块。

一般来说,它比语法分析要简单。

程序源码的各种复杂逻辑,在经过语法分析之后,就成了一棵抽象语法树(AST)。

生成这个语法树比较难,因为源代码里互相耦合的概念太多。

生成语法树之后,把树遍历一次,就可以完成语义分析。

不同的语句和运算符,构成了语法树的不同节点。不同的节点有不同的处理函数。在处理函数里检查类型是否一致、计算中间结果、化简常量表达式、添加类型的自动转换(type cast)。

之后,就可以生成三地址码了。从生成三地址码开始,已经是编译器的后端了。

615a88f4c4c45f82f376c7a6e96c13ec.png

如上图,是语法树的节点数据结构。

因为是多叉树,所以有个父节点的指针parent,子节点组成一个指针数组,由nodes和nb_nodes表示。

31行的scf_operator_t* op,表示节点的操作符。不管是语句还是运算符,一律看作一种操作符。

把所有的操作符组成一个大数组,就是支持的所有语义。

(把人能看懂的源码文本,终于变成了机器能处理的数据结构了)

f90bda74f5705187861abde8fb85f0ab.png

第1列,用一个整数表示操作符的类型。

第2列,是操作符的名字字符串。

第3列,是运算优先级。

小括号表示的表达式,优先级最高的,语句的优先级最低。先乘除,后加减。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值