PC/FORTH 判定

条件短语

IF   THEN      |     满足条件就执行 IF 后面的语句    不满足就执行 THEN 后面的语句;不管 IF 成功不成功,THEN 后面的语句都会执行到。
IF 只能编译,只能用于定义中
 // 定义  YIDA(n - result)   如果 n 等于12 就执行 IF 后面的语句 STAR, 否则就执行 THEN 后面的语句; 
      // 每个  IF  后面都要有  THEN  对应以便回复到原程序。
   
< > 要求的栈顶顺序和算术运算符一直,即: 2  <  10   相当于   2  10  <   ; 17  >  -39  相当于  17  -39  >  ;
0=0<0> 只要求栈顶上的一个值 ,把该值与 0 比较。
词   NOT  ,把测试值的条件值求反; =  NOT  IF   表示栈顶两个值不相等时便执行  IF  后面的词;





选择短语
 
IF    ELSE    THEN
定义词, /CHECK   ,从栈中弹出一个数查看是否 =0  ,如果相等就显示 INVALID  并且 运行 DROP 命令清除栈顶的数据;否则,就执行  /  操作。




嵌套的 IF ……  THEN 语句
** 每个  IF  必须保证有一个  THEN  语句对应
  
  //最后的 ; 应该加一个 DROP 来清除栈中的原始值

FORTH 中的比较运算符最后会在栈顶放一个 “1”或 “0” ,1 表示真,0 表示假。
我这里显示 “-1” 表示真 , “0” 表示假;因为 IF 把任何非零值表示为真,“0”作为假
 
NOT 把一个数的逐位二进制反码 : 0   NOT . -1       |       1  NOT . -2      |     -2  NOT . 1




逻辑操作词
OR     或操作,对栈中前两个数进行或操作, 1 OR -1 = -1  
ANT   与操作,对栈中前两个数进行与操作




两个本身包含 IF 的词
?DUP     表示当栈顶项为非零值时才复制栈顶元素。
:  /CHECK      ?DUP   IF   /   ELSE   DROP   THEN   ;                 :   /CHECK       ?DUP   IF   /    THEN   ;  

ABOUT"    :如果程序在运行中可能某处会出错,则可在该处使用词   ABOUT"   。这个词把栈顶值作为标志,若标志为真则使执行异常终止并清除堆栈,返回到终端等待输入信息。同时也可以打印出最后被解释的名词,以及我们想附加的任何信息。
:   /CHECK     DUP   0=   ABORT"   ZERO   DENOMINATOR"   /   ;
   4 0 的时候堆栈中的数据都会被清除
改进:
: ENVELOPE      /CHECK  ."  THE  ANSWER  IS"  .   ;
   当分母为  0 的时候,程序中止;后面的输出 THE ANSWER IS 就不会执行到,打印到的也是 ENVELOPE的名字;

验证堆栈是否下溢,?STACK    eg:    :  ?STACK    ABORT"    STACK    EMPTY"  ;

猜你喜欢

转载自www.cnblogs.com/meihao1203/p/10137188.html