Identifierare (datorspråk)

I datorprogrammeringsspråk är en identifierare en lexikal token ( även kallad symbol , men inte att förväxla med symbolens primitiva datatyp) som namnger språkets entiteter. Några av de typer av enheter som en identifierare kan beteckna inkluderar variabler , datatyper , etiketter , subrutiner och moduler .

Lexikal form

Vilka teckensekvenser som utgör identifierare beror på språkets lexikala grammatik . En vanlig regel är alfanumeriska sekvenser, med understreck också tillåtet (på vissa språk är _ inte tillåtet), och med villkoret att det inte kan börja med en numerisk siffra (för att förenkla lexning genom att undvika förväxling med heltalsliteraler ) – så foo, foo1, foo_bar, _foo är tillåtna, men 1foo är inte – det här är definitionen som används i tidigare versioner av C och C++ , Python och många andra språk. Senare versioner av dessa språk, tillsammans med många andra moderna språk, stöder många fler Unicode- tecken i en identifierare. En vanlig begränsning är dock att inte tillåta blanksteg och språkoperatörer; detta förenklar tokenisering genom att göra den fri form och kontextfri . Till exempel, att förbjuda + i identifierare på grund av dess användning som en binär operation innebär att a+b och a + b kan tokeniseras på samma sätt, medan om det var tillåtet skulle a+b vara en identifierare, inte en addition. Blanksteg i identifierare är särskilt problematiskt, som om blanksteg är tillåtna i identifierare, då är en klausul som om regnig dag då 1 laglig, med regnig dag som identifierare, men att tokenisera detta kräver fraskontexten att vara i tillståndet av ett om klausul. Vissa språk tillåter dock blanksteg i identifierare, såsom ALGOL 68 och vissa ALGOL-varianter – till exempel är följande ett giltigt uttalande: real half pi; som skulle kunna anges som .real. halv pi; (nyckelord representeras med fetstil, konkret via stropping ). I ALGOL var detta möjligt eftersom nyckelord är syntaktiskt differentierade, så det finns ingen risk för kollision eller tvetydighet, mellanslag elimineras under linjerekonstruktionsfasen och källan bearbetades via skannerlös parsning , så lexing kan vara kontextkänslig.

På de flesta språk har vissa teckensekvenser den lexikaliska formen av en identifierare men är kända som nyckelord – till exempel är if ofta ett nyckelord för en if-sats, men är lexiskt av samma form som ig eller foo , nämligen en sekvens av bokstäver. Denna överlappning kan hanteras på olika sätt: dessa kan vara förbjudna att vara identifierare – vilket förenklar tokenisering och analys – i vilket fall de är reserverade ord ; de kan båda tillåtas men särskiljas på andra sätt, såsom via stropping; eller nyckelordssekvenser kan tillåtas som identifierare och vilken känsla bestäms utifrån kontext, vilket kräver en kontextkänslig lexer. Icke-sökord kan också vara reserverade ord (förbjudna som identifierare), särskilt för framåtkompatibilitet , om ett ord kan bli ett nyckelord i framtiden. På ett fåtal språk, t.ex. PL/1 , är skillnaden inte tydlig.

Semantik

Omfattningen eller tillgängligheten inom ett program för en identifierare kan vara antingen lokal eller global. En global identifierare deklareras utanför funktioner och är tillgänglig i hela programmet. En lokal identifierare deklareras inom en specifik funktion och endast tillgänglig inom den funktionen.

För implementeringar av programmeringsspråk som använder en kompilator är identifierare ofta bara kompileringstidsenheter . Det vill säga, vid körning innehåller det kompilerade programmet referenser till minnesadresser och förskjutningar snarare än textidentifieringstoken (dessa minnesadresser, eller förskjutningar, har tilldelats av kompilatorn till varje identifierare).

I språk som stöder reflektion , som interaktiv utvärdering av källkod (med en tolk eller en inkrementell kompilator), är identifierare också runtime-enheter, ibland till och med som förstklassiga objekt som fritt kan manipuleras och utvärderas. I Lisp kallas dessa för symboler .

Kompilatorer och tolkar tilldelar vanligtvis ingen semantisk betydelse till en identifierare baserat på den faktiska teckensekvensen som används. Det finns dock undantag. Till exempel:

  • I Perl indikeras en variabel med ett prefix som kallas sigil , som specificerar aspekter av hur variabeln tolkas i uttryck .
  • I Ruby anses en variabel automatiskt vara oföränderlig om dess identifierare börjar med en stor bokstav.
  • I Fortran anger den första bokstaven i en variabels namn om den som standard skapas som en heltalsvariabel eller flyttalsvariabel .
  • I Go bestämmer versalerna i den första bokstaven i en variabels namn dess synlighet (versal för offentlig, gemen för privat).

På vissa språk, som Go, baseras identifierarnas unikhet på deras stavning och synlighet.

I HTML är en identifierare ett av de möjliga attributen för ett HTML - element . Det är unikt i dokumentet.

Se även