语义分析包括确定类型,类型检查,识别含义,控制流检查,一致性检查和相关名字检查以及其他功能。他的任务是检查语法的正确结构是否有意义并在语义正确的基础上生成一种中间代码和目标代码。其中语法的制导翻译包括自底向上的语法制导翻译和自顶向下的语法制导翻译。而他生成的中间语言形式包括1.波兰表示(前缀式,运算符在前)和逆波兰表示(后缀式,运算符在后),2.图表示法即抽象语法树形式其结构使中序遍历时为正常的运算式,前序遍历时为波兰表示,后序遍历时为逆波兰表示。
3.三元式()对于一目运算符,我们可以规定只用ARG1,而多目运算符可以用若干条相继的三元式来表示。) 3.1间接三元式()在三元式的基础上附加一张指示器表─间接码表,按运算的先后顺序列出有关三元式在三元式表中的位置。这种表示方法称为间接三元式)。4.四元式(比三元式加了一个RESULT Ti其中Ti是临时变量)
树的表示中 产生式 语义动作
(1)E→E1 op E2 {E.val:=NODE(op,E1.val,E2.val)}其中NODE是建立一棵新树,以OP为根,以E1.val,E2.val为左右枝。返回指向树根的指针
(2)E→(E1) {E.val:=E1.val}
(3)E→-E1 {E.val:=UNARY(@E1.val)}UNARY与NODE相似,只不过是单枝。
(4)E→i {E.val:=LEAF(i)} LEAF建立以i.LEXCAL为标志的叶结,回送的是结点i的地址。
3. 三元式
对于一目运算符,