Syntax 如何处理;获得;关于PostScript中的一个过程
我正在编写postscript解释器,但不知道应该如何处理以下代码。具体来说,我不知道如何在过程(代码块的最后一行)上使用Syntax 如何处理;获得;关于PostScript中的一个过程,syntax,postscript,Syntax,Postscript,我正在编写postscript解释器,但不知道应该如何处理以下代码。具体来说,我不知道如何在过程(代码块的最后一行)上使用get。get对程序有效吗?如果是,嵌套过程是否被视为一个元素?如果是,这是否意味着应将{pop 0}添加到堆栈中 userdict /internaldict { count 0 eq { /internaldict errordict /invalidaccess get exec } if dup type /integertype ne {
get
。get
对程序有效吗?如果是,嵌套过程是否被视为一个元素?如果是,这是否意味着应将{pop 0}
添加到堆栈中
userdict /internaldict
{
count 0 eq
{ /internaldict errordict /invalidaccess get exec }
if
dup type /integertype ne
{ /internaldict errordict /invalidaccess get exec }
if
dup 1183615869 eq
{ pop 0 }
{ /internaldict errordict /invalidaccess get exec }
ifelse
}
dup 14 get 1 25 dict put
感谢您提供的任何澄清 基本上,请阅读《第三版PostScript语言参考手册》第3.3.6节,其中(通常)对这一点进行了非常清楚的解释 压缩数组是普通数组更紧凑的表示形式, 主要用于作为程序使用。压缩数组对象是 与普通数组对象不同(它具有packedarray类型 而不是数组),但在大多数方面,它的行为与 普通数组 正如本文所说,packedarray与常规数组几乎没有区别,因此
get
函数在压缩数组上的作用与在普通数组上的作用完全相同
举个具体的例子:
%% procedure to convert PostScript units to inches
%% usage: units inch inches
/inch {
72 div
} bind def
现在如果我这样做:
/inch load 0 get ==
结果是72,而
/inch load 1 get ==
导致
--div--
对于您发布的代码,“get”将检索压缩数组的第14个元素(从0开始)。在您的情况下,这将是:
{pop 0}
数组的所有常规规则都适用,因此数组中的数组是父元素的单个元素
因为第0个元素是count
,第一个元素是0
,第二个元素是eq
,第三个元素是另一个packedarray{/internaldict errordict/invalidaccess get exec}
等
因此,是的,您应该在操作数堆栈上以{pop 0}结束
你知道你可以自己用Ghostscript来调查这类问题吗?如果出于某种原因,您不相信Ghostscript是一个合格的PostScript解释器,您可以随时与PLRM检查其行为。感谢您对此事的澄清!我不知道Ghostscript可以这样使用,我一定会在将来检查它!我认为这些可能只是可执行数组,但不是打包的。否则,
put
将导致问题。祝您的解释器好运!你可以在(许多是我写的!)