- 1
- 0
- 约1.7万字
- 约 60页
- 2019-09-10 发布于辽宁
- 举报
2) 通常引进运算符栈,利用它,从中缀表达式生成逆波兰表示。 这过程大致如下。 初始时,把左端标志符号#下推入运算符栈,#看作优先级最低的运算符。从左到右扫描中缀表达式,当是运算分量时,直接输出,当是运算符时,把它与运算符栈顶的运算符进行优先级比较。如果当前运算符优先级高,把它下推入运算符栈,如果运算符栈顶运算符的优先级高,则把运算符从运算符栈退去,并输出。继续把当前运算符与运算符栈顶运算符比较优先级,直到当前运算符优先级高,把它下推入运算符栈。如此继续,直到扫描完整个中缀表达式。这时整个输出便是所求的逆波兰表示。 4) 生成逆波兰表示之翻译方案 逆波兰表示生成的翻译方案: ? 自顶向下方式 E∷=TR R∷=addop T { print (addop.lexeme) }R |ε T∷=num { print (num.lexval)} ? 自底向上方式 E∷=E1+T{ print(+) } E∷=T T∷=T1*F{ print(*) } T∷=F F∷=(E) F∷=id { print(id.name)} 5) 从逆波兰表示生成目标代码 算符优先分析技术, 设立运算分量栈与运算符栈 例 从逆波兰表示 a b <11 GOF max b=14 GO
原创力文档

文档评论(0)