|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
表达式求值是程序设计语言编译中的一个最基本问题。它的实现时栈应用的又一个典型例子。这里介绍一种简单直观、广为使用的算法,通常称为“算法优先法”。
5 B" L& u1 M2 ?+ D! j! _. w要把一个表达式翻译成正确求值的一个机器指令序列,或者直接对表达式求值,首先要能够正确解释表达式。例如,要对下面的算术表达式求值:
, ~. K! I% t+ W, w/ M4+2×3-10/5
0 Q) S/ {1 T8 F8 i( _首先要了解算术四则运算的规则。即:
. C% L; S. M* F1 r+ X! p(1)
- j3 U6 s/ U% @& @0 `3 l% ~/ V先乘除,后加减;' k. ~6 ~2 \4 I" c& W6 h
(2) x$ y5 L, N# [0 U- Y% @% X7 `
从左算到右;9 f! F2 V6 _5 ?/ c" L% E% U9 h
(3). h8 k, w( t+ h' E! e- B
先括号内,后括号外。
' r; R5 M$ f0 \7 u$ \由此,这个算术表达式的计算顺序应为
* u, F0 ]$ v1 V0 x" i0 |3 e* j4+2×3-10/5=4+6-10/5=10-10/5=10-2=8
% c r# B" O; g8 ]8 o算符优先法就是根据这个运算优先关系的规定来实现对表达式的编译或解释执行的。$ E( L9 y- O' F7 d' m
任何一个表达式都是由操作数、运算符和界限符组成的,我们称它们为单词。一般地,操作数既可以是常数也可以是被说明符为变量或常量的标识符;运算符可以分为算术运算符、关系运算符和逻辑运算符3类;基本界限符有左右括号和表达式结束符等。为了叙述的见解,我们仅讨论简单算术表达式的求职问题。这种表达式只含加、减、乘、除4种运算符。
2 p6 w$ I0 ?& z0 |" x我们把运算符和界限符统称为算符,它们构成的集合命名为OP。根据上述3条运算规则,在运算的每一步中,任何两个相继出现的算符θ1和θ2之间的有限关系至多是下面3种关系之一;
6 @! B2 i4 s! g1 r* C4 ^θ1<θ2 θ1的优先权低于θ2# @3 h! Y! n0 [
θ1=θ2 θ1的优先权等于θ2+ F6 t) V. m0 N$ {& F+ P% l* l
θ1>θ2 θ1的优先权高于θ2 |
|