TTM (linguagem de programação) - TTM (programming language)

TTM
Paradigma pré-processador macro
Projetado por Steven M. Caine e E. Kent Gordon
Apareceu pela primeira vez 1968
Versão estável
1,0 /
Licença MIT
grandes implementações
Unidata TTM
Influenciado por
TRAC

TTM é uma seqüência orientada, de propósito geral macro processamento de linguagem de programação desenvolvida em 1968 por Steven Caine e E. Kent Gordon no Instituto de Tecnologia da Califórnia .

Descrição

A seguinte descrição é feita a partir do manual de referência TTM original e a subsequente extensão de processamento em lote.

TTM é uma linguagem recursiva, interpretativo projetado principalmente para a manipulação de cadeia, edição de texto, definição de macro e expansão, e outras aplicações geralmente classificados como programação de sistemas. É derivado, principalmente, do GAP e GPM.

Inicialmente, TTM foi planeado como a porção de processamento de macro de um montador para o IBM System / 360 e, como tal, foi concebido para ultrapassar as limitações e inconsistências que existiam nas montadores padrão para esse sistema.

Além disso, ele foi projetado para ter toda a energia possuída por montadores macro gerais anteriores, mas com as dificuldades sintáticas e semânticas infelizes removidos.

Durante o desenvolvimento do TTM, tornou-se evidente que outros do que o processamento assembler macro aplicações eram possíveis. Estes incluem a edição de dados, manipulação de texto, expressão compilação e processamento de macro para outros fins que montadoras processadores de linguagem.

A versão inicial do TTM foi implementado para ser executado de uma forma de conversação sob o sistema de partilha Caltech Tempo básico para o IBM System / 360 Modelo 50 . Outras versões foram escritos para executar no ambiente de processamento em lote de OS / 360 e para operar na frente ou em conjunto com vários processadores de linguagem.

Sintaxe e semântica

A implementação de referência pressupõe que TTM é dado um arquivo de texto contendo uma combinação de chamadas de função de texto e TTM comuns (ou seja, invocações). O texto é digitalizado caractere por caractere. Qualquer texto comum é passado para a saída inalterado (exceto para escapes ). Se uma função TTM é encontrado, ele é coletado e executado.

A forma geral de uma chamada de função TTM parece com isso

#<functionname;arg1;arg2;...;argn>

onde o nome da função e os argumentos são cadeias de caracteres arbitrários que não contenham caracteres de significado: '#', '<', '>', e ';'. A função é chamada com os argumentos especificados e o texto resultante é inserido no texto original no lugar da chamada de função. Se a chamada de função foi precedido por um único caractere '#', em seguida, a varredura continuará apenas antes de o texto inserido a partir da chamada de função.

Isso é chamado ativo invocação.

Se a chamada de função foi precedido por dois caracteres '#', em seguida, a digitalização retoma apenas após o texto inserido. Isso é chamado passivo invocação.

Durante a cobrança de uma chamada de função, chamadas de funções adicionais podem ser encontradas, por exemplo, isso.

#<functionname;arg1;#<f2;arg;...>;...;argn>

A chamada de função aninhada será chamado quando encontrou eo resultado inserido no texto da chamada de função externa e digitalização da chamada de função externa retoma no local indicado pelo número de caracteres '#' anteriores a chamada aninhada.

Se uma função tem, por exemplo, 2 argumentos, qualquer extras são ignorados. Para funções definidas pelo utilizador, se são fornecidos também alguns argumentos, um adicional são adicionados com o valor da cadeia de caracteres vazia ( ""). Uma função pode ter um máximo de 62 argumentos.

Tal como acontece com outras linguagens de programação aplicativas , uma função pode ser TTM recursivo e pode ser definida como o resultado da chamada de uma sequência de outras chamadas de função.

As funções são, quer embutido ou definido pelo utilizador . Um grande número de funções internas no existem e são definidos no manual de referência TTM

definição de função

funções definidas pelo usuário são criadas usando as duas seguintes funções embutidas.

  • # <Ds; nome; text>
  • # <Ss; nome; text1; text2 ...; textn>

A primeira função, ds para "definir string", define uma seqüência de caracteres chamado no dicionário TTM. O nome é "nome" e seu valor é "texto". Invocar esta cadeia denominado fará com que sua invocação a ser substituído pelo valor (ou seja, "texto").

A segunda função, ss para "string segmento", analisa o texto de uma seqüência definida anteriormente à procura de ocorrências de seus argumentos: text1, text2, ... textn. Quando uma ocorrência é encontrada, é substituída com uma marca de segmento . Todas as ocorrências de cada argumento passam a ter a mesma marca segmento.

Quando uma cadeia segmentado é invocado, cada um argumento para a chamada é substituído pelo segmento correspondente marca. Considere este exemplo.

[01] #<ds;F;abcxxdefyy>
[02] #<ss;F;xx;yy>
[03] #<F;11;22>

A cadeia é definida F (linha 1) e o seu órgão "abcxxdefyy" é segmentada na "xx" duas cordas e "aa" (linha 2). Quando invocado (linha 3), ele irá retornar o valor "abc11def22". Com efeito, temos uma função definida pelo usuário F com dois argumentos.

escapando

É possível escapar um ou mais caracteres usando qualquer uma das duas convenções.

  1. <...> - escapar vários personagens.
  2. @ - escapar de um único caractere

Se uma string é delimitada entre <...>, então ele é digitalizado, mas não interpretado por TTM. No processo de digitalização, os suportes exteriores <e> são removidos. Se houver ocorrências aninhados de <...>, em seguida, eles são digitalizados, mas o <e> não são removidos. Os suportes devem equilibrar: o número de '<' caracteres deve ser igual ao número de '>' caracteres.

O '@' convenção de escape faz com que o intérprete para passar como está o personagem após o '@'. O líder '@' é deixado se dentro de um <...> sequência de escape, caso contrário, ele é removido. Um uso é permitir que ocorrências desequilibrados de caracteres '<' ou '>'.

Exemplos

Exemplo 1: Definição de Função

O exemplo mais básico envolve a definição de uma função que é útil para a definição de funções adicionais. Esta função "meta" é chamado def . É escrito como:

#<ds;def;<##<ds;name;<text>>##<ss;name;subs>>>
#<ss;def;name;subs;text>

Podemos, por exemplo, usar def para definir a string XX como 12345 e, em seguida, segmento XX em 34 por escrever isto.

#<def;XX;34;12345>

A chamada

#<XX;0000>

produzirá então a string "1200005".

O def função opera invocando ds para definir o nome da função e um texto inicial no TTM dicionário - XX em nosso exemplo.

Em seguida, o texto da entrada do dicionário de XX é segmentado, com respeito a quaisquer argumentos especificados: "34" neste caso.

Quando XX é invocado, o seu argumento é substituído para a marca de segmento.

Exemplo 2: Factorial

A função factorial pode ser definido (utilizando o acima ## <def> função) como se segue.

#<def;n!;N;<#<lt;N;2;1;<#<mu;N;#<n!;#<su;N;1>>>>>>>

Observe que o cálculo interna (# <mu ...) escapou por isso só serão avaliados após o # <lt ... funções é executado e retorna que a computação aninhada como seu resultado.

Uma chamada de exemplo ficaria assim.

#<n!;3>

e voltaria a corda 6.

Veja também

A relação exata entre TTM e TRAC é desconhecida. A documentação TTM indica que ele foi derivado de GAP e GPM. Em qualquer caso, a descrição das características da TRAC também se aplicam a TTM. No entanto, removendo a distinção sintática entre embutido e função definida pelo usuário, TTM parece ser uma linguagem muito mais limpo.

Notas

Referências

  • Greenwald, ID e Kane, M, The Share 709 Sistema: Programação e Modificação. JACM 6 N ° 2 (1959). pp. 128-133.
  • Greenwald, ID, Manuseio Instruções Macro. MCCA 2, No. 11 (1959), 21-22.
  • Remington Rand Divisão UNIVAC, UNIVAC Generalizado de programação. Filadélfia de 1957.
  • Mcllroy, MD, utilizando o SAP Instruções Macro para manipular expressões simbólicas. Bell Telephone Laboratories Centro de Computação (1960).

links externos