表达式解析 可以使用 递归下降 + 堆栈,也可以使用纯粹的递归下降. 使用递归下降 + 堆栈,更容易形成语法树,也更容易扩展. 递归下降对应递归调用. 考虑递归调用的终止条件. 表达式中最低优先级的是最基本的,对应生成的语法树的最底层,最接近终止条件,最先写. 根据产生式的匹配顺序,以及嵌套关系决定优先级比较麻烦. 将操作符和 操作数 分别放到两个堆栈中,易于扩展. 每个规则对应一个函数. 函数内首先处理 可以处理的termial ,即退出递归的条件. expression = ["+"|"-"] term {("+"|"-") term} . term = factor {("*"|"/") factor} . //不考虑三元操作符 , 将 上面的两项合并 一元操作符 二元操作符 expression =[ uniOp ] factor { dblOp factor} . 将操作符封装为类. |
|