Regras de sintaxe para `variável`

Regras de sintaxe para `variável`

Eu tenho a última impressão deMetafontBook(8ª impressão, Volume C). Desde aquela impressão (e, portanto, desde todas as outras impressões), duas correções muito curiosas apareceram emerrata:

1)

insira a descrição da imagem aqui

Pergunta sobre esta correção:

Asufixoé um conjunto vazio ou qualquer número de <tag>s ou <subscript>s em qualquer combinação (veja regras de sintaxe na p.54). Então, a <subscript>é um subconjunto desufixo. Portanto, não está claro por que se diz

sufixado ou subscrito

como se fossem propriedades separadas.

2)

insira a descrição da imagem aqui

Vale a pena colocar aqui a definição de <suffix list>:

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

Pergunta sobre esta correção:

Qual é algum exemplo específico concreto para este caso?

Responder1

O que significa "sufixo"? Normalmente você diria algo como "uma variável com sufixo". Mas a suffixtambém pode estar emptyde acordo com as regras de sintaxe, então isso significaria quetodovariável é sufixada. Portanto a suffixregra não é a melhor referência para “sufixo”. Portanto, temos que usar um significado intuitivo de “sufixo”. Agora as variáveis ​​gostam x.ae x[2]aparecem e às vezes se comportam de forma diferente, por exemplo x.ae x.bsão completamente diferentes, mas x[1]e x[2]estão muito mais conectadas. Então, especialmente depois do comentário

Mas 'xk' não é o mesmo; é a tag 'x' com o sufixo da tag 'k', não a tag 'x' subscrita pelo valor da variável k.

um leitor pode presumir que x[k]não é "sufixo". Portanto, embora "sufixado" por si só deva ser suficiente, isso pode levar a mal-entendidos em alguns casos, por isso é mais fácil apenas adicionar "ou subscrito".

Um exemplo para o problema da lista de sufixos é

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

Isso falha porque xnão pode ter sufixo e, portanto, x1é inválido. Portanto x, que é an internal quantitye, portanto, a variable, não é a, suffixporque caso contrário x1também seria um sufixo e seria permitido em a suffix list.

Na minha opinião, o problema aqui é que isso parece ser mais um problema do suffix listque a suffixdefinição: assumindo que variáveis ​​internas não são sufixos, então

newinternal x;
y.x1 = 1;
end;

também não deveria funcionar, mas isso é aceito pelo Metafont.

Portanto, a regra mais precisa poderia ser: Uma quantidade internaéum sufixo e o Exercício 7.4 é verdadeiro, mas a suffix listé

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

Responder2

Este é um pequeno acréscimo à resposta aceita - o resumo do meu entendimento.


Correção 1):

a frase "ou subscrito" existe para adicionar variáveis ​​subscritas ao significado "intuitivo" de "sufixo".

A questão é que no MetaFontBook existem dois significados para a palavra "sufixo": "geral" (regra de sintaxe na p.54) e "intuitivo" (algo não vazio que não seja subscrito).

Correção 2):

os seguintes exemplos com x<tag>e x<subscript>não funcionam:

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

os seguintes exemplos com x<tag>e x<subscript>funcionam:

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

Portanto, a segunda correção deve ser corrigida não apenas conforme dito na resposta aceita, mas também adicionar " x<subscript>" a " x<tag>".

informação relacionada