TTM (programovací jazyk) - TTM (programming language) - Wikipedia
![]() | Tento článek je tón nebo styl nemusí odrážet encyklopedický tón použitý na Wikipedii.Prosinec 2012) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Paradigma | univerzální makro procesor |
---|---|
Navrhl | Steven M. Caine a E. Kent Gordon |
Poprvé se objevil | 1968 |
Stabilní uvolnění | 1.0 |
Licence | MIT |
Hlavní, důležitý implementace | |
Unidata TTM | |
Ovlivněno | |
GAP, GPM, TRAC |
TTM je řetězec orientovaný, zpracování maker pro všeobecné účely programovací jazyk vyvinutý v roce 1968 Stevenem Cainem a E. Kentem Gordonem na Kalifornský technologický institut.
Popis
Následující popis je převzat z původní referenční příručky TTM[1] a následné rozšíření pro dávkové zpracování.[2]
TTM Je rekurzivní, interpretační jazyk určený především pro manipulaci s řetězci, úpravy textu, definici a rozšiřování maker a další aplikace obecně klasifikované jako systémové programování. Je odvozen především od GAP[3] a GPM.[4]
Zpočátku byla TTM plánována jako část zpracování maker v assembleru pro IBM System / 360 a jako taková byla navržena tak, aby překonala omezení a nesrovnalosti, které existovaly ve standardních assemblerech pro tento systém.[5][6]
Kromě toho byl navržen tak, aby měl veškerou moc, kterou vlastnili starší obecní sestavovatelé maker, ale s odstraněním nešťastných syntaktických a sémantických obtíží.[7][8][9][10]
Během vývoje TTM vyšlo najevo, že jsou možné i jiné aplikace než zpracování maker assembleru. Patří mezi ně úpravy dat, manipulace s textem, kompilace výrazů a zpracování maker pro jiné jazykové procesory než assemblery.
Počáteční verze TTM byla implementována tak, aby běžela konverzačně v rámci Caltech Basic Time Sharing System pro IBM System / 360 Model 50.[11] Byly napsány další verze pro běh v prostředí dávkového zpracování OS / 360 a pro provoz před nebo ve spojení s různými jazykovými procesory.
Syntaxe a sémantika
Referenční implementace předpokládá, že TTM dostane textový soubor obsahující nějakou kombinaci běžných textových a funkčních volání TTM (tj. Vyvolání). Text je skenován znak po znaku. Jakýkoli běžný text je předán na výstup beze změny (kromě uniká Pokud dojde k funkci TTM, je shromážděna a provedena.
Obecná forma volání funkce TTM vypadá takto
#
kde název funkce a argumenty jsou libovolné řetězce znaků neobsahující významné znaky: '#', '<', '>' a ';'. Funkce je vyvolána se zadanými argumenty a výsledný text je vložen do původního textu namísto volání funkce. Pokud bylo volání funkce předponou jediným znakem '#', skenování bude pokračovat pouze před vložený text z volání funkce.
Tomu se říká aktivní vyvolání.
Pokud bylo volání funkce předponou dvěma znaky '#', pak se skenování obnoví jen po vložený text. Tomu se říká pasivní vyvolání.
Během shromažďování volání funkcí se mohou setkat další volání funkcí, například toto.
#; ...; argn>
Volání vnořené funkce bude vyvoláno při zjištění a výsledek vložený do textu vnějšího volání funkce a skenování vnějšího volání funkce bude pokračovat na místě určeném počtem znaků '#' před vnořeným voláním.
Pokud funkce trvá například 2 argumenty, jsou všechny doplňky ignorovány. U uživatelem definovaných funkcí, pokud je zadáno příliš málo argumentů, je přidán další s hodnotou prázdného řetězce (""). Funkce může mít maximálně 62 argumentů.
Stejně jako u ostatních aplikovatelné programovací jazyky, funkce TTM může být rekurzivní a může být definována jako výsledek vyvolání posloupnosti dalších volání funkcí.
Funkce jsou buď vestavěný nebo definované uživatelem. Existuje velké množství integrovaných funkcí, které jsou definovány v referenční příručce TTM[1]
Definice funkce
Uživatelem definované funkce se vytvářejí pomocí následujících dvou vestavěných funkcí.
- #
- #
První funkce, ds pro "definovat řetězec", definuje pojmenovaný řetězec ve slovníku TTM. Název je „name“ a jeho hodnota je „text“. Vyvolání tohoto pojmenovaného řetězce způsobí, že jeho vyvolání bude nahrazeno hodnotou (tj. „Textem“).
Druhá funkce, ss pro „segmentový řetězec“, prohledá text dříve definovaného řetězce a hledá výskyt jeho argumentů: text1, text2, ... textn. Když je nalezen výskyt, je nahrazen a značka segmentu. Všechny výskyty každého argumentu jsou nahrazeny stejnou značkou segmentu.
Při vyvolání segmentovaného řetězce je každý argument volání nahrazen odpovídající značkou segmentu. Zvažte tento příklad.
[01] #[02] # [03] #
Řetězec F je definován (řádek 1) a jeho tělo „abcxxdefyy“ je segmentováno na dva řetězce „xx“ a „yy“ (řádek2). Při vyvolání (řádek 3) vrátí hodnotu „abc11def22“. Ve skutečnosti máme uživatelem definovanou funkci F se dvěma argumenty.
Unikající
Je možné uniknout jedné nebo více postavám pomocí jedné ze dvou konvencí.
- <...> - uniknout více znakům.
- @ - uniknout jedinému znaku
Pokud je řetězec uzavřen v <...>, je skenován, ale není interpretován TTM. V procesu skenování jsou odstraněny vnější závorky . Pokud existují vnořené výskyty <...>, budou prohledány, ale nebudou odstraněny. Závorky musí být vyvážené: počet znaků '<' se musí rovnat počtu znaků '>'.
Konvence úniku '@' způsobí, že tlumočník předá znak jako za znakem @. Úvodní znak „@“ je ponechán, pokud je v <...> řídicí sekvenci, jinak je odstraněn. Jedním z použití je umožnit nevyvážené výskyty znaků '<' nebo '>'.
Příklady
Příklad 1: Definice funkce
Nejzákladnější příklad zahrnuje definování funkce, která je užitečná pro definování dalších funkcí. Tato funkce „meta“ se nazývá def.To je psáno jako:
#>; ## >> #
Můžeme například použít def definovat řetězec XX jako 12345 a poté segment XX na 34 napsáním tohoto.
#
Volání
#
poté vytvoří řetězec „1200005“.
The def funkce funguje vyvoláním ds definovat název funkce a počáteční text v TTM slovník - XX v našem příkladu.
Poté je text záznamu ve slovníku XX segmentován s ohledem na zadané argumenty: „34“ v tomto případě.
Když je vyvolána XX, její argument nahradí značku segmentu.
Příklad 2: Faktoriál
Faktoriální funkci lze definovat (pomocí výše uvedeného ##
#>>>>>>>
Všimněte si, že vnitřní výpočet (# Příklad volání by vypadal takto. a vrátil by řetězec 6. Přesný vztah mezi TTM a TRAC není znám. Dokumentace TTM naznačuje, že byla odvozena z GAP[3] a GPM.[4] V každém případě se popis charakteristik systému TRAC vztahuje i na TTM. Odstraněním syntaktického rozdílu mezi vestavěnou a uživatelem definovanou funkcí se však TTM jeví jako mnohem čistší jazyk.#
Viz také
Poznámky
Reference
externí odkazy