下面是涉及运算符 + 和整数或浮点运算分量的表达式的文法。区分浮点数的方法是看它有无小数点。
E -> E + T | T T -> num.num | num
<table> <thead> <tr> <th></th> <th>产生式</th> <th>语法规则</th> </tr> </thead> <tbody> <tr> <td>1)</td> <td>E -> E_1 + T</td> <td>E.type = E_1.type === float || T.type === float ? float : int</td> </tr> <tr> <td>2)</td> <td>E -> T</td> <td>E.type = T.type</td> </tr> <tr> <td>3)</td> <td>T -> num.num</td> <td>T.type = float</td> </tr> <tr> <td>4)</td> <td>T -> num</td> <td>T.type = int</td> </tr> </tbody> </table>
给出一个 SDD,将一个带有 + 和 的中缀表达式翻译成没有冗余括号的表达式。比如因为两个运算符都是左结合的,并且 的优先级高于 +,所以 ((a*(b+c))*(d)) 可翻译为 a*(b+c)*d
几个属性设置:
给出一个 SDD 对 x*(3*x+x*x) 这样的表达式求微分。表达式中涉及运算符 + 和 、变量 x 和常量。假设不进行任何简化,也就是说,比如 3*x 将被翻译为 3*1+0\x。
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8