并发

针对并发带来的问题,我们的解决方式是不要并发。

一把大锁保平安,只在需要时拆锁,不要over design

语法制导

什么是语义?调用某个符号之前有没有声明,表达式类型

属性文法为上下文无关文法赋予语义 SDD

实现属性文法 SDT

在语法分析过程中嵌入语义动作(代码),该动作在左边的所有文法符号处理好后立刻执行

如何将SDD转为SDT?

综合属性和继承属性都描述了信息的流动

在依赖图中,S属性体现为自下而上的流动,继承属性则是从左向右,从上而下的 有序的信息流动

因此从代码角度,综合属性是返回值,继承属性是调用参数

语法制导定义

SDD给每个产生式关联了一组规则,唯一确定了每个非终结符节点的属性值,但没有规定实际执行的顺序,方式

有点像定义了一个方程组

S属性定义是一种只有综合属性的SDD

L属性定义是包含继承属性,但是一系列规则限制不产生环

综合属性

只能由该节点本身和子节点的属性来定义

表达式求值,中缀表达式转后缀表达式可以用综合属性实现

继承属性

只能由父节点,本身和兄弟结点的属性来定义

类型声明文法可以用继承属性实现

数组类型声明和引用需要使用两种属性

为什么?int a[2][3]在树上的顺序是int 2 3,但我们需要构造(2,(3,int))

如何进行语义分析

定义一些listener,在遍历树的某些时机做适当的事

offline 再遍历语法树 有开销

online 语法制导 在语法分析的同时完成

更多方式有待学习