(我又带着另一个问题回来了:-))
给定以下 PostScript 代码:
/riverside { 5 pop } def
/star { 6 pop 2 {riverside} repeat } def
star
我想知道应该如何处理嵌套过程。(我正在创建自己的解释器)。 当我执行星形过程时,它在中途找到一个 nameObjec(riverside) 并将其替换为包含来自 Riverside 过程的值的可执行数组并执行它们。如果我执行重复运算符,解释器会崩溃,因为堆栈上只剩下一项。
当我已经在一个可执行数组(=prodecure)中时,我应该直接执行一个可执行数组(=procedure),还是应该始终将可执行数组(=procedures)推到(操作数?/执行?)堆栈上?还是只能由其他操作员执行?这条江边应该被处决多少次?(2 或 3 次?)我猜是 2?
供您参考:这是我在第 3 行执行star时遇到的情况(请参阅错误):
% begin execute 3rd line (star)
% OP = operand stack
% EX = execution stack
% handle 6
OP: 6
EX: star
% handle pop (removes 6 from OP)
OP: -
EX: star
% handle 2
OP: 2
EX: star
% set the riverside executable array on the EX, execute the values
OP: 2
EX: star riverside
% repeat operator:
CRASH, only one item on the OP left, but repeat operator requires 2 operands.
OP: 5
EX:
% end
请对此事有所了解,因为它有些复杂/令人困惑:-)
更新: 另一个代码示例可能是这个:
/starside
{ 72 0 lineto
currentpoint translate
-144 rotate } def
/star
{ moveto
currentpoint translate
4 {starside} repeat
closepath
gsave
.5 setgray fill
grestore
stroke } def
200 200 star
showpage
当解释器标记/star { moveto ...如果遇到嵌套的{starside}将如何处理?(+ 如果有{starside 5 2 mul pop}而不是只有{starside}怎么办?)