并发
针对并发带来的问题,我们的解决方式是不要并发。
一把大锁保平安,只在需要时拆锁,不要over design
语法制导
什么是语义?调用某个符号之前有没有声明,表达式类型
属性文法为上下文无关文法赋予语义 SDD
实现属性文法 SDT
在语法分析过程中嵌入语义动作(代码),该动作在左边的所有文法符号处理好后立刻执行
如何将SDD转为SDT?
综合属性和继承属性都描述了信息的流动
在依赖图中,S属性体现为自下而上的流动,继承属性则是从左向右,从上而下的 有序的信息流动
因此从代码角度,综合属性是返回值,继承属性是调用参数
语法制导定义
SDD给每个产生式关联了一组规则,唯一确定了每个非终结符节点的属性值,但没有规定实际执行的顺序,方式
有点像定义了一个方程组
S属性定义是一种只有综合属性的SDD
L属性定义是包含继承属性,但是一系列规则限制不产生环
综合属性
只能由该节点本身和子节点的属性来定义
表达式求值,中缀表达式转后缀表达式可以用综合属性实现
继承属性
只能由父节点,本身和兄弟结点的属性来定义
类型声明文法可以用继承属性实现
数组类型声明和引用需要使用两种属性
为什么?int a[2][3]在树上的顺序是int 2 3,但我们需要构造(2,(3,int))
如何进行语义分析
定义一些listener,在遍历树的某些时机做适当的事
offline 再遍历语法树 有开销
online 语法制导 在语法分析的同时完成
更多方式有待学习