`변수`에 대한 구문 규칙

`변수`에 대한 구문 규칙

마지막 인쇄가 있습니다메타폰트북(8판, C권). 그 인쇄 이후(따라서 다른 모든 인쇄 이후에도) 두 가지 매우 흥미로운 수정 사항이 나타났습니다.정오표:

1)

여기에 이미지 설명을 입력하세요

이 수정에 관한 질문:

접미사는 빈 집합이거나 임의 개수의 <tag>s 또는 <subscript>s의 조합입니다(54페이지의 구문 규칙 참조). 따라서 a는 <subscript>다음의 부분집합입니다.접미사. 그러므로 왜 그런 말을 했는지는 분명하지 않습니다.

접미사 또는 아래첨자

마치 그것들이 별개의 재산인 것처럼.

2)

여기에 이미지 설명을 입력하세요

여기에 다음의 정의를 넣을 가치가 있습니다 <suffix list>.

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

이 수정에 관한 질문:

이 사건에 대한 구체적이고 구체적인 예는 무엇입니까?

답변1

"suffixed"은(는) 무슨 뜻인가요? 일반적으로 "접미사가 있는 변수"와 같은 것을 말합니다. 그러나 a는 구문 규칙에 따를 suffix수도 있으므로 이는 다음을 의미합니다.empty모든변수가 붙습니다. 그러므로 이 suffix규칙은 "접미사"에 대한 최선의 참조가 아닙니다. 그래서 우리는 "접미사"라는 직관적인 의미를 사용해야 합니다. 이제 와 같은 변수가 x.a나타나고 x[2]때로는 다르게 동작합니다. 예를 들어 x.a완전히 x.b다르지만 x[1]x[2]훨씬 더 연결되어 있습니다. 특히 댓글 뒤에는

하지만 'x.k'는 동일하지 않습니다. 이는 변수 k의 값이 첨자된 태그 'x'가 아니라 'k' 태그가 접미사로 붙은 태그 'x'입니다.

독자는 x[k]"접미사"가 붙지 않았다고 가정할 수 있습니다. 따라서 "접미사"만으로도 충분하지만 어떤 경우에는 오해를 불러일으킬 수 있으므로 "또는 아래첨자"만 추가하는 것이 더 쉽습니다.

접미사 목록 문제의 예는 다음과 같습니다.

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

x접미사를 붙일 수 없으므로 실패하므로 x1유효하지 않습니다. 따라서 x는 an 이므로 internal quantitya 는 variablea 가 아닙니다. 그렇지 않으면 접미사가 되어 a 에서 허용되기 suffix때문 입니다 .x1suffix list

suffix list내 생각에 여기서 문제는 이것이 정의 보다는 문제인 것 같다는 것입니다 suffix: 내부 변수가 접미사가 아니라고 가정하면,

newinternal x;
y.x1 = 1;
end;

작동하지 않아야 하지만 이는 Metafont에서 허용됩니다.

따라서 더 정확한 규칙은 다음과 같습니다. 내부 수량~이다a 접미사 및 연습 7.4는 참이지만 a suffix list

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

답변2

이것은 허용되는 답변에 대한 작은 추가 사항입니다. 내 이해를 요약한 것입니다.


수정 1):

"또는 첨자"라는 문구는 "접미사"의 "직관적" 의미에 첨자 변수를 추가하기 위해 존재합니다.

문제는 MetaFontBook에서 "접미사"라는 단어에는 "일반"(p.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>.

관련 정보