变量的语法规则

变量的语法规则

我有最新印刷版元字体书(第 8 次印刷,C 卷)。自那次印刷以来(因此自所有其他印刷以来),出现了两个非常奇怪的更正勘误表

1)

在此处输入图片描述

有关此修正的问题:

A后缀是空集,或者是任意数量的<tag>s 或<subscript>任意组合的 s(请参阅第 54 页的语法规则)。因此,<subscript>后缀。因此不清楚为什么这么说

后缀或下标

就好像它们是独立的财产一样。

2)

在此处输入图片描述

值得在这里提出以下定义<suffix list>

<suffix list> -> <suffix> | <suffix list>,<suffix>

有关此修正的问题:

该案例有何具体例子?

答案1

“后缀”是什么意思?通常你会说“带后缀的变量”。但suffix也可以empty,所以这意味着每一个变量是后缀的。因此,该suffix规则不是“后缀”的最佳参考。所以我们必须使用“后缀”的直观含义。现在像x.a和这样的变量x[2]看起来有时表现不同,例如x.ax.b完全不同,但x[1]x[2]联系更紧密。所以特别是在评论之后

但是 'x.k' 并不相同;它是标签 'x' 加上标签 'k' 作为后缀,而不是标签 'x' 加上变量 k 的值作为下标。

读者可能会认为x[k]不是“后缀”。因此,虽然单独使用“后缀”应该足够了,但在某些情况下可能会导致误解,因此只需添加“或下标”就更容易了。

后缀列表问题的一个例子是

newinternal x;
forsuffixes s = x1: show s; endfor
end;

失败,因为x不能加后缀,因此x1是无效的。因此x,是internal quantity,因此variable不是,suffix因为否则x1也是后缀,并且允许在中suffix list

在我看来,这里的问题似乎是定义的问题suffix list而不是问题suffix:假设内部变量不是后缀,那么

newinternal x;
y.x1 = 1;
end;

也不应该起作用,但是 Metafont 接受了这一点。

因此更准确的规则可能是:内部量后缀和练习 7.4 是正确的,但是 asuffix list

<external suffix> -> <empty> | <subscript><suffix> | <external tag><suffix>
<suffix list> -> <external suffix> | <suffix list>,<external suffix>

答案2

这是对已接受答案的一个小补充——我的理解的总结。


更正1):

“或下标”这个短语是为了将下标变量添加到“后缀”的“直观”含义中。

问题在于,在 MetaFontBook 中,“后缀”一词有两个含义:“一般”(第 54 页的语法规则)和“直观”(下标之外的非空内容)。

修正2):

以下示例使用x<tag>x<subscript>不起作用:

newinternal x;
forsuffixes s = x.k: show s; endfor
end
newinternal x;
forsuffixes s = x[1]: show s; endfor
end

以下示例与x<tag>和 一起x<subscript>工作:

newinternal x;
y.x.k = 1;
end
newinternal x;
y.x[1] = 1;
end

因此,第二次修正不仅要按照接受答案中的说法进行修正,还要x<subscript>在“ ”中添加“ ” x<tag>

相关内容