Stropping (syntaxe) - Stropping (syntax)
v počítačový jazyk design, stropping je metoda výslovného označování posloupností písmen jako majících speciální vlastnost, například jako klíčové slovo, nebo určitý typ proměnné nebo umístění úložiště, a tedy obývat jiný jmenný prostor než běžné názvy („identifikátory“), aby nedocházelo ke střetům. Stropping se nepoužívá ve většině moderních jazyků - místo toho jsou klíčová slova vyhrazená slova a nelze je použít jako identifikátory. Stropping umožňuje použít stejnou posloupnost písmen jako klíčové slovo i jako identifikátor a zjednodušuje analýza v takovém případě - například povolení proměnné s názvem -li
bez střetu s klíčovým slovem -li.
Stropping je primárně spojen s ALGOL a související jazyky v 60. letech. Ačkoli to nějaké najde moderní využití, je snadno zaměnitelný s jinými podobné techniky které jsou povrchně podobné.
Dějiny
Metoda stroppingu a termín "stropping" vznikly při vývoji ALGOL v šedesátých letech minulého století, kdy se používalo k reprezentaci typografických rozdílů (tučně a podtrženo) nalezených v publikačním jazyce, které nemohly být přímo zastoupeny v hardwarovém jazyce - psací stroj mohl mít tučné znaky, ale při kódování na děrných štítcích nebyly žádné tučné postavy. Termín „stropping“ vznikl v roce ALGOL 60, z "apostrof ", protože některé implementace ALGOL 60 používaly kolem textu apostrofy k označení tučného písma,[1] jako 'li'
reprezentovat klíčové slovo -li. Stropping je také důležité v ALGOL 68, kde se používá více metod stropování, známých jako „režimy stropování“; původní uzavřené apostrofy z ALGOL 60 nebyly široce používány, přičemž nejčastější období nebo velká písmena byla častější,[2] jako v .LI
nebo LI
a termín „stropping“ byl aplikován na všechny tyto.
Syntaxe
Pro stropping byla použita řada různých syntaxí:
- Algol 60 běžně se používá pouze konvence jednoduchých uvozovek kolem slova, obvykle jako apostrofy, odtud název „stropping“ (např.
'ZAČÍT'
). - Algol 68[3][2] v některých implementacích považujte sekvence písmen s předponou jedinou citací, za klíčová slova (např.
'ZAČÍT
)[4]
Ve skutečnosti se často stávalo, že v jednom jazyce mohlo být použito několik stroppingových konvencí. Například v ALGOL 68, výběr konvence stroppingu může být specifikován překladačem směrnice (v terminologii ALGOLpragmat „), jmenovitě BOD, HORNÍ, KVÓT nebo RES:
- BOD pro 6 bitů (nedostatek znaků pro malá písmena), jako v
.PRO
- podobná konvence se používá ve FORTRANU 77, kde jsou LOGICKÁ klíčová slova zastřižena jako.EQ.
atd. (viz níže) - HORNÍ pro 7-bit, jako v
PRO
- s malými písmeny používanými pro běžné identifikátory - QUOTE jako v ALGOL 60, jako v
'pro'
- RES vyhrazená slova, jak se používají v moderních jazycích -
pro
je vyhrazen a není k dispozici běžným identifikátorům
Různé režimy pravidel jsou a lexikální specifikace pro znaky se sklonem, i když v některých případech mají jednoduchou interpretaci: v režimech jednoduchého apostrofu a tečky funguje první znak jako úniková postava, zatímco v režimu uzavřených apostrofů fungují apostrofy jako oddělovače, jako v řetězcové literály.
Další příklady:
- Atlas Autocode měl na výběr ze tří: klíčová slova mohla být
podtrženo
pomocí backspace a overstrike na a Flexowriter klávesnici, mohly by být zavedeny asymbol% procent%
, nebo by mohly být zadányVELKÁ PÍSMENA
bez oddělovacího znaku (režim „velká písmena“, v tomto případě musely být všechny proměnné malými písmeny). - ALGOL 68RS programy mohou používat několik variant stropování, dokonce i v rámci jednoho jazykového procesoru.
- Edinburgh IMP zdědil Atlas Autocode
symbol% procent%
konvence předpony, ale ne její další možnosti stropování
Příklady různých stylů ALGOL 68
Všimněte si vedení pr (zkratka pragmat) směrnice, který je sám stropped ve stylu BODU nebo citátu, a ¢
za komentář (od „2¢
") - viz ALGOL 68: pr & co: Pragmaty a komentáře pro detaily.
Algol68 "přísný" jak je obvykle publikováno | Nabídka stropping (jako wikitext ) | Pro 7-bit charakter překladač kódu | Pro 6-bit charakter překladač kódu | Algol68 pomocí res stropping (vyhrazené slovo) |
---|---|---|---|---|
¢ podtržené nebo tučné písmo ¢ režimu xint = int; xint součet sq: = 0; pro i zatímco součet čtverečních ≠ 70 × 70 dělat součet sq +: = i ↑ 2 od | 'pr' quote 'pr''mode' 'xint' = 'int'; 'xint' sum sq: = 0; 'for' i 'while' sum sq ≠ 70 × 70'do 'sum sq +: = i ↑ 2 'od' | .PR UPPER .PRMODE XINT = INT; XINT součet sq: = 0; FOR i WHILE součet sq / = 70 * 70DO součet sq +: = i ** 2OD | .PR POINT .PR.MODE .XINT = .INT; .XINT SUM SQ: = 0; .PRO I .WHILE SUM SQ .NE 70 * 70.DO SUM SQ .PLUSAB I .UP 2.OD | .PR RES .PRmode .xint = int; .xint součet sq: = 0; pro i zatímco součet sq ≠ 70 × 70do součet sq +: = i ↑ 2od |
Jiné jazyky
Z různých důvodů Fortran 77 má tyto „logické“ hodnoty a operátory: .SKUTEČNÝ., .NEPRAVDIVÉ., .EQ., .NE., .LT., .LE., . GT., .GE., .EQV., .NEQV., .NEBO., .A., .NE.[5]
.A., .NEBO. a .XOR. se také používají v kombinovaných testech v LI
a MFF
prohlášení v dávkové soubory utéct pod Software JP procesory příkazového řádku jako 4DOS,[6] 4OS2, a 4NT / převzít velení.
Moderní využití
Většina moderních počítačových jazyků nepoužívá stropping, až na dvě významné výjimky:
Používání mnoha jazyků v Microsoftu .SÍŤ Společná jazyková infrastruktura (CLI) vyžaduje způsob, jak používat proměnné v jiném jazyce, což mohou být klíčová slova ve volajícím jazyce. To se někdy provádí pomocí předpon, například @
v C # nebo uzavření identifikátoru v závorkách, v Visual Basic.NET.
Druhým významným příkladem je mnoho implementací strukturovaný dotazovací jazyk. V těchto jazycích lze vyhrazená slova použít jako názvy sloupců, tabulek nebo proměnných tak, že je lexikálně ohraničíte. Norma specifikuje uzavření vyhrazených slov do uvozovek, ale v praxi se přesný mechanismus liší podle implementace; MySQL, například umožňuje použití vyhrazených slov v jiných kontextech tak, že je uzavřete do zpětných lístků a Microsoft SQL Server používá hranaté závorky.
Stropping lze také použít v Programovací jazyk Nim. V Nim lze rezervované slovo použít jako identifikátor tak, že jej uzavřete do zpětných lístků.
Existují i jiné, méně významné příklady. Například, IDL webu používá přední podtržítko _
k identifikátorům stropu, které by jinak kolidovaly s vyhrazenými slovy: hodnota identifikátoru odstraní toto přední podtržítko, což způsobí tento stropping, spíše než konvence pojmenování.[7]
Unstropping kompilátorem
V kompilátor frontend, k uvolnění původně došlo během iniciály rekonstrukce linky fáze, což také eliminovalo mezery. Poté následovalo analýza bez skeneru (bez tokenizace); to byl standard v šedesátých letech, zejména pro ALGOL. V moderním použití se odtržení obvykle provádí jako součást lexikální analýza. To je jasné, pokud se rozlišuje lexer na dvě fáze skeneru a hodnotitele: skener kategorizuje sekvenci se sledováním do správné kategorie a poté se hodnotitel při výpočtu hodnoty rozběhne. Například v jazyce, kde se počáteční podtržítko používá k identifikaci stropu, aby se zabránilo kolizím s vyhrazenými slovy, sekvence _li
by byl kategorizován jako identifikátor (ne jako vyhrazené slovo -li
) skenerem a hodnotitel by tomu dal hodnotu -li
, poddajný (Identifikátor, pokud)
jako typ a hodnota tokenu.
Podobné techniky
Existuje řada podobných technik, obvykle předpona nebo přípona identifikátoru k označení odlišného zacházení, ale sémantika se liší. Striktně řečeno, stropping se skládá z různých reprezentací stejného jména (hodnoty) v různých jmenných prostorech a vyskytuje se ve fázi tokenizace. Například v ALGOL 60 se shodným apostrofem 'li'
je tokenizováno jako (klíčové slovo, pokud), zatímco -li
je tokenizováno jako (Identifikátor, pokud) - stejná hodnota v různých třídách tokenů.
Používání velkých písmen pro klíčová slova se nadále používá jako konvence pro psaní gramatik pro lexing a parsování - tokenizace vyhrazeného slova -li
jako třída tokenu IF a poté představující klauzuli if-then-else frází IF Expression THEN Statement ELSE Statement
kde velká písmena jsou klíčová slova a velká písmena jsou neterminální symboly v výrobní pravidlo (koncové symboly jsou označeny malými písmeny, například identifikátor
nebo celé číslo
, pro celé číslo doslovné ).
Konvence pojmenování
Nejvíce volně, jeden může použít konvence pojmenování vyhnout se střetům, běžným předponám nebo příponám s podtržítkem, jako v li_
nebo _pak
. Úvodní podtržítko se často používá k označení soukromých členů v objektově orientovaném programování.
Tyto názvy mohou být interpretovány kompilátorem a mají určitý účinek, i když se to obvykle provádí ve fázi sémantické analýzy, nikoli ve fázi tokenizace. Například v Pythonu je jedno úvodní podtržítko slabým soukromým indikátorem a ovlivňuje, které identifikátory se importují při importu modulu, zatímco dvojité úvodní podtržítko (a ne více než jedno koncové podtržítko) u atributu třídy vyvolá mangling jména.[8]
Vyhrazená slova
Zatímco moderní jazyky obecně používají k rozlišení klíčových slov od identifikátorů spíše vyhrazená slova než stropování - např. Tvorba -li
vyhrazeno - často také rezervují syntaktickou třídu identifikátorů jako klíčová slova, čímž získají reprezentace, které lze interpretovat jako režim stroppingu, ale místo toho mají sémantiku vyhrazených slov.
To je nejpozoruhodnější v C, kde jsou vyhrazeny identifikátory, které začínají podtržítkem, ačkoli přesné podrobnosti o tom, jaké identifikátory jsou rezervovány v jakém rozsahu jsou zahrnuty, a přední dvojitá podtržítka jsou vyhrazena pro jakékoli použití;[9] podobně v C ++ jakýkoli identifikátor, který obsahuje dvojité podtržítko je vyhrazeno pro jakékoli použití, zatímco identifikátor, který začíná podtržítkem, je vyhrazen v globálním prostoru.[poznámka 1] Lze tedy přidat nové klíčové slovo foo
pomocí vyhrazeného slova __foo
. I když je to povrchně podobné stropování, sémantika je jiná. Jako vyhrazené slovo, řetězec __foo
představuje identifikátor __foo
ve společném jmenném prostoru identifikátoru. Při stropování (předponou klíčových slov pomocí __
), řetězec __foo
představuje klíčové slovo foo
v samostatném jmenném prostoru klíčových slov. Používá tedy vyhrazená slova, tokeny pro __foo
a foo
are (identifier, __foo) and (identifier, foo) - different values in the same category - while in stropping the tokens for __foo
a foo
jsou (klíčové slovo, foo) a (identifikátor, foo) - stejné hodnoty v různých kategoriích. Ty řeší stejný problém střetů jmenného prostoru způsobem, který je stejný pro programátora, ale který se liší formální gramatikou a implementací.
Mangling jména
Mangling jména také řeší střety jmen přejmenováním identifikátorů, ale to dělá mnohem později při kompilaci, během sémantické analýzy, ne během tokenizace. Skládá se z vytváření názvů, které obsahují informace o rozsahu a typu, primárně pro použití linkery, a to jak pro zabránění střetům, tak pro zahrnutí nezbytných sémantických informací do samotného názvu. V těchto případech mohou být původní identifikátory identické, ale kontext je jiný, jako ve funkcích foo (int x)
proti foo (char x)
, v obou případech mají stejný identifikátor foo
, ale jiný podpis. Tato jména by mohla být pozměněna foo_i
a foo_c
například zahrnout informace o typu.
Sigils
Syntakticky podobný, ale sémanticky odlišný jev sigily, které místo toho označují vlastnosti proměnných. Ty jsou běžné v Perl, Rubín a různé další jazyky k identifikaci charakteristik proměnných / konstant: Perl k označení typu proměnné, Ruby k rozlišení proměnných od konstant a označení rozsahu. Všimněte si, že to ovlivní sémantika proměnné, nikoli syntax zda jde o identifikátor nebo klíčové slovo.
Paralely v lidské řeči
Stropping se používá v počítačových programovacích jazycích k výrobě překladač (nebo přesněji: analyzátor 's) práce snadnější, tj. v rámci schopností relativně malých a pomalých počítačů dostupných v počátcích výpočetní techniky ve 20. století. Podobné techniky se však běžně používají také pro čtení s porozuměním pro lidi. Některé příklady jsou:
- Vkládání důležitých slov tučně, jako například první zmínka o stropping v záhlaví této stránky, protože definování stroppingu je samotným účelem stránky.
- Formátování nových slov ve formátu kurzíva když jsou poprvé představeny v textu. To se běžně používá v sci-fi a fantazie při zavádění vynalezených rostlin, potravin, tvorů; v cestopis a historické psaní při popisu neznámých cizích slov; a tak dále. Také pomocí speciálního písma, případně spojeného s daným jazykem, například pomocí a gotický písmo pro Němec slova.
- Obvykle se používá jiný jazyk latinský nebo řecký znamenat technické podmínky. Je to podobné jako při používání vyhrazených slov, ale pro lepší čitelnost se obvykle kombinuje s kurzívou. Například:
- typické binomická nomenklatura nebo „latinské názvy“ rostlin a zvířat to čtenáři pomůže vidět Erithacus rubecula je zvláštní technický název evropského robina zrzavý evropský drozd ne.
- mnoho právní výrazy, kde se krátká latinská fráze vztahuje na velké množství právních předpisů a precedentů, jako např habeas corpus, dílčí soudce, in loco parentis.
- logické a matematické pojmy jako např QED, a priori, naopak …
- Písemně japonský, navíc Kanji znaky, dvě odlišné abecedy (přesněji slabiky ) Hiragana a Katakana, oba představující stejnou sadu zvuků, se používají k rozlišení foneticky vysvětlených japonských slov od importovaných cizích slov; Katakana se také používá pro zdůraznění, podobně kurzíva v angličtině.
Viz také
Poznámky
- ^ Existují další omezení, například identifikátor, který začíná podtržítkem, za nímž následuje velké písmeno.
Reference
- ^ King, Peter R., ed. (1974-06-18). "(neznámý)". Sborník mezinárodní konference o implementaci ALGOL 68. Katedra výpočetní techniky, University of Manitoba, Winnipeg: University of Manitoba, Katedra výpočetní techniky: 148. ISBN 9780919628113.
Vážnější problémy představují „stropping“, technika používaná k rozlišení tučného textu od římského. Některé implementace vyžadují apostrofy kolem tučného písma (odtud název stropping); jiné vyžadují odstup a podtržení; […]
Citovat používá obecný název (Pomoc) - ^ A b van Wijngaarden, Adriaan; Mailloux, Barry James; Peck, John Edward Lancelot; Koster, Cornelis Hermanus Antonius; Sintzoff, Michel; Lindsey, Charles Hodgson; Meertens, Lambert Guillaume Louis Théodore; Fisker, Richard G., eds. (1976). „Oddíl 9.3 Prohlášení“ (PDF). Revidovaná zpráva o algoritmickém jazyce ALGOL 68. Springer-Verlag. 94, 123. ISBN 978-0-387-07592-1. OCLC 1991170. Archivováno (PDF) od původního dne 2019-04-19. Citováno 2019-05-11.
- ^ http://www.fh-jena.de/~kleine/history/languages/Algol68-RR-HardwareRepresentation.pdf
- ^ Lindsey, Charles Hodgson; van der Meulen, Sietse G. (1977). Neformální úvod do ALGOL 68. Severní Holandsko. str. 348–349. ISBN 978-0-7204-0726-6. OCLC 230034877.
- ^ http://www.personal.psu.edu/jhm/f90/lectures/10.html
- ^ Brothers, Hardin; Rawson, Tom; Conn, Rex C.; Paul, Matthias R .; Dye, Charles E .; Georgiev, Luchezar I. (2002-02-27). Online nápověda 4DOS 8.00.
- ^ IDL webu, "3.1. Jména ". […] U všech těchto konstruktů je identifikátor hodnotou tokenu identifikátoru s odstraněným libovolným úvodním znakem U + 005F LOW LINE (" _ ") (podtržítkem). [...] Poznámka [...] Předním" _ "se používá k úniku identifikátoru, aby nevypadal jako vyhrazené slovo, aby bylo možné například definovat rozhraní s názvem" interface ". Předpona" _ "se zruší, aby se identifikátor nezachránil. […]
- ^ PEP 008: Popisné: Pojmenování stylů
- ^ C99 standard, 7.1.3 Vyhrazené identifikátory
Další čtení
- Hansen, W. J .; Boom, H. J. (1978). "Zpráva o zastoupení standardního hardwaru pro revidovaný ALGOL 68". Acta Informatica. 9 (2): 105–119. doi:10.1007 / BF00289072. S2CID 34231916.
- Lindsey, Charles Hodgson (Březen 1970), „Reprezentace kódu ISO pro ALGOL 68“, Bulletin ALGOL, ACM (31): 37–60, AB31.3.6