形式语言与自动机14 语义分析预备知识

程序语言基本上可以分为三大类:

  • 声明语句:
    • 简单变量声明
    • 数组、结构体变量声明
  • 赋值语句:
    • 能产生实际机器代码的核心语句
  • 控制语句 :
    • If 语句
    • while 语句
    • 函数调用

一段程序用 JAVA字节码 表示

机器抽象表示

一个虚拟机器可以用以下三部分建模:

  • 处理器
  • 内存
  • 指令系统

处理器可以用自己写的数据结构建模;

内存就更好办了,用一个数组表示一段存储

一台机器就可以如上new出来


语法制导

语法制导具体实现:

对LR的栈再次进行扩充:

捆绑:符号栈、状态栈、语义值栈

语义值栈中放的是与符号栈中符号相关的一些语义值

上面这个是人为设计的,由上面这个我们可以得到下面这个

这里没听懂……

语义分析过程:

语法分析树+语义分析 = 中间表示

现阶段,我们知道语法分析树和中间表示(汇编机器码),反推语义分析

属性文法

属性文法是对CFG的扩展,扩展了属性和属性方程(函数)

属性值计算是在语法分析的过程中进行的

这就是在语法制导下 完成语义分析

语义分析我们使用的时候一般是已经给出来了属性文法,根据属性文法进行语义分析比较简单;但是设计属性文法是一件比较难的事儿。

属性的值被绑定时间不是一样的:

语义分析相对于语法分析貌似是原来的句子变成含有真正意义的值。

综合属性:某节点属性依赖于所有子节点

继承属性:某节点属性依赖于父节点和兄弟节点(不是综合属性的就是继承属性)

\(L(left)\)-属性文法

posted @ 2020-07-16 18:11  _Sandman  阅读(197)  评论(0编辑  收藏  举报