Identifier (computersprog) - Identifier (computer languages)
I computersprog , identifikatorer er tokens (også kaldet symboler , men ikke at forveksle med den symbol oprindelig type ), der navngiver de sproglige enheder. Nogle af de typer enheder, en identifikator kan betegne, omfatter variabler , typer , etiketter , underrutiner og pakker .
Leksikalsk form
Hvilke tegnsekvenser, der udgør identifikatorer, afhænger af sprogets leksikale grammatik . En almindelig regel er alfanumeriske sekvenser, med understregning også tilladt (på nogle sprog er _ ikke tilladt), og med den betingelse, at det ikke kan begynde med et numerisk ciffer (for at forenkle læsning ved at undgå forveksling med heltalsbokstaver ) - så foo, foo1, foo_bar, _fooer tilladt , men 1fooer ikke - dette er den definition, der blev brugt i tidligere versioner af C og C ++ , Python og mange andre sprog. Senere versioner af disse sprog, sammen med mange andre moderne sprog, understøtter mange flere Unicode -tegn i en identifikator. En fælles begrænsning er imidlertid ikke at tillade mellemrumstegn og sprogoperatører; dette forenkler tokenisering ved at gøre den fri-form og kontekstfri . For eksempel betyder forbud +i identifikatorer på grund af dets anvendelse som en binær operation, at a+bog a + bkan tokeniseres det samme, mens hvis det var tilladt, a+bville det være en identifikator, ikke en tilføjelse. Hvidt mellemrum i identifikator er særlig problematisk, som om mellemrum er tilladt i identifikatorer, så er en klausul, som if rainy day then 1er lovlig, med rainy daysom en identifikator, men tokenisering af dette kræver den frasale kontekst for at være i tilstanden af en if -klausul. Nogle sprog tillader dog mellemrum i identifikatorer, f.eks. ALGOL 68 og nogle ALGOL -varianter - for eksempel er følgende en gyldig erklæring: real half pi;som kunne indtastes som .real. half pi;(søgeord repræsenteres med fed skrift, konkret via stropping ). I ALGOL var dette muligt, fordi søgeord er syntaktisk differentieret, så der ikke er risiko for kollision eller tvetydighed, mellemrum elimineres i linjen genopbygningsfasen , og kilden blev behandlet via scannerløs parsing , så lexing kunne være kontekstfølsom.
På de fleste sprog har nogle tegnsekvenser den leksikale form af et identifikator, men er kendt som søgeord - for eksempel ifer det ofte et søgeord for en if -klausul, men er leksikalt af samme form som igeller foonemlig en bogstavsekvens. Denne overlapning kan håndteres på forskellige måder: Disse kan være forbudt fra at være identifikatorer - hvilket forenkler tokenisering og parsing - i så fald er de reserverede ord ; de kan begge være tilladt, men skelnes på andre måder, såsom via stropping; eller søgeordssekvenser kan være tilladt som identifikatorer, og hvilken sans bestemmes ud fra kontekst, hvilket kræver en kontekstfølsom ordforfatter. Ikke-søgeord kan også være reserverede ord (forbudt som identifikatorer), især for fremadrettet kompatibilitet , hvis et ord kan blive et nøgleord i fremtiden. På få sprog, f.eks. PL/1 , er sondringen ikke klar.
Semantik
Omfanget eller tilgængeligheden inden for et program for en identifikator kan enten være lokal eller global. En global identifikator erklæres uden for funktioner og er tilgængelig i hele programmet. En lokal identifikator er erklæret inden for en bestemt funktion og kun tilgængelig inden for denne funktion.
Ved implementering af programmeringssprog, der bruger en compiler , er identifikatorer ofte kun kompilere tidsenheder . Det vil sige, at det kompilerede program ved runtime indeholder referencer til hukommelsesadresser og forskydninger i stedet for de tekstlige identifikationstokener (disse hukommelsesadresser eller forskydninger er blevet tildelt af kompilatoren til hver identifikator).
På sprog, der understøtter refleksion , såsom interaktiv evaluering af kildekoden (ved hjælp af en tolk eller en inkrementel kompilator), er identifikatorer også runtime-enheder, nogle gange endda som førsteklasses objekter , der frit kan manipuleres og evalueres. I Lisp kaldes disse symboler .
Kompilatorer og tolke tildeler normalt ikke nogen semantisk betydning til en identifikator baseret på den faktiske brugte tegnsekvens. Der er dog undtagelser. For eksempel:
- I Perl angives en variabel ved hjælp af et præfiks kaldet en sigil , som angiver aspekter af, hvordan variablen fortolkes i udtryk .
- I Ruby betragtes en variabel automatisk som uforanderlig, hvis dens identifikator starter med et stort bogstav.
- I Fortran angiver det første bogstav i en variabels navn, om det som standard er oprettet som et helt tal eller variabel med flydende punkt .
- I Go bestemmer store bogstaver i det første bogstav i en variabels navn dets synlighed (store bogstaver for offentlige, små bogstaver for private).
På nogle sprog som f.eks. Go er identifikatorenes unikke karakter baseret på deres stavning og synlighed.
I HTML er en identifikator en af de mulige attributter for et HTML -element . Det er unikt i dokumentet.