Literał znakowy
Literał znakowy – literał reprezentujący w kodzie źródłowym konkretną wartość typu znakowego.
Reprezentacja literału znakowego
edytujLiterał znakowy to określona jednostka leksykalna danego języka programowania, która reprezentuje wartość wybraną z dostępnego zestawu znaków. To jakie literały znakowe mogą zostać użyte, a więc jaki jest dostępny zestaw znaków, zależy od systemu komputerowego i ustawień w nim zawartych. Przykładowymi zestawami znaków są ASCII, EBCDIC. Obecnie we współczesnych systemach dostępne są różne zestawy (np. Unicode) zawierające m.in. znaki narodowe i różne symbole, np. matematyczne.
Literał znakowy może być zapisany w kodzie źródłowym:
- bezpośrednio, za pomocą danego znaku, zazwyczaj ujęty w odpowiednie ograniczniki, np. język C[1][2][3][4]: 'C', '7', '*';
- za pomocą symbolu, specjalnego kodu (np. kodu sterującego), opisu znaku, np. język C[1][2][3][4]: '\n', '\\'; język Pascal[5][6]: ^N;
- za pomocą kodu liczbowego, zgodnego z bieżącym zestawem znaków, np. język C[1][2][3][4]: '\47', '\xFC', język Pascal[5][6]: #10, #$A.
Literał znakowy a inne literały
edytujW danym języku programowania zwykle obok literału znakowego występuje literał łańcuchowy, przy czym składnia różnych języków jest tak skonstruowana, że:
- literał znakowy jest zapisywany inaczej niż literał łańcuchowy, np. język C[1][2][3][4]:
- literał znakowy w apostrofach, np. 'a',
- literał łańcuchowy w cudzysłowach, np. "a",
- literał znakowy i łańcuchowy jest zapisywany tak samo, np. język Pascal[5][6]:
- literał znakowy w apostrofach, np. 'a',
- literał łańcuchowy również w apostrofach, np. 'a'.
W tym drugim przypadku interpretacja, czy dana jednostka leksykalna jest literałem znakowym czy łańcuchowym, zależy od kontekstu, w którym dany literał został zapisany i nie da się rozróżnić literału znakowego od jednoznakowego literału łańcuchowego na podstawie samego zapisu literału. Np. w języku Pascal[5][6], w instrukcji przypisania x:='a'; to czy literał 'a' jest literałem znakowym czy łańcuchowym wynika z kontekstu – w tym przypadku typu zmiennej x (np. w Turbo Pascalu[5], jeżeli zmienna x jest typu znakowego to literał 'a' jest literałem znakowym zajmującym 1 bajt; jeżeli x jest typu string to literał 'a' reprezentuje łańcuch zapisany jako: 1 bajt długość łańcucha równa 1 i znak łańcucha – drugi bajt).
Literały znakowe mogą być:
- traktowane jak dane liczbowe całkowite, o wartości zgodnej z kodem danego znaku według aktualnego zestawu znaków, np. język C[1][2][3][4]: x=5+'a'; natomiast użycie literału znakowego jak łańcucha wymaga odpowiedniego przekształcenia lub konwersji,
- traktowane jak łańcuchy jednoznakowe, co umożliwia operowanie literałami znakowymi i łańcuchami równocześnie, np. Pascal[5][6], x:='Ala' + '.'; wynika z jednolitego zapisu i kontekstowej interpretacji literału (patrz wyżej); natomiast użycie literału znakowego jak liczby całkowitej wymaga konwersji lub użycia odpowiedniej funkcji.
Literały znakowe w językach programowania
edytujjęzyk programowania | bezpośredni zapis literału znakowego | zapis za pomocą opisu znaku | zapis za pomocą kodu znaku | miejsce opisu lub kodu względem ograniczników | przykłady |
---|---|---|---|---|---|
Język C[1][2][3][4] | 'znak' | '\opis_znaku' | '\kod_ósemkowy' | pomiędzy ogranicznikami | 'a', '\n', '\12' |
Język C – rozszerzenia ANSI[2] | traktowane jak dane int (2 bajty), możliwość zapisu dwóch znaków 'ab' | jw. | możliwość stosowania także kodów szesnastkowych '\xkod_szesnastkowy' | pomiędzy ogranicznikami | 'zn', 'a\n', '\12\xFA' |
Icon[7] | 'znak' | '\opis_znaku' | --- | wewnątrz | 'a', '\n' |
uwaga: w języku Icon literał znakowy jest tylko szczególnym przypadkiem zapisu zbioru znaków (jednoelementowym zbiorem znaków) | |||||
Modula 2[8] | 'znak', "znak" | --- | kod_ósemkowyC | bez ograniczników | 'a', 12C |
Pascal[5][6] | 'znak' | ^znak_sterujący | #kod_dziesiętny, #$kod_szesnastkowy | bez ogranicznika | 'a', #10, #$FA, ^z, |
PL/M[9][10] | 'znak' | --- | kod_dec, kod_binB, kod_octQ, kod_octO kod_hexH | bez ograniczników | 'a', 1AH |
Zobacz też
edytujPrzypisy
edytuj- ↑ a b c d e f Brian W. Kernighan, Dennis M. Ritche: Język C. Warszawa: Wydawnictwa Naukowo-Techniczne, 1988, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-1067-3. (pol.).
- ↑ a b c d e f g Jan Bielecki: Turbo C z grafiką na IBM PC. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990, seria: Mikrokomputery. ISBN 83-204-1101-7. (pol.).
- ↑ a b c d e f Jan Bielecki: Od C do C++, programowanie obiektowe w języku C. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990. ISBN 83-204-1332-X. (pol.).
- ↑ a b c d e f Podręcznik języka C na Wikibooks
- ↑ a b c d e f g Andrzej Marciniak: Borland Pascal 7.0. Poznań: Nakom, 1994, seria: Biblioteka Użytkownika Mikrokomputerów. ISBN 83-85060-53-7. ISSN 0867-6011. (pol.).
- ↑ a b c d e f Michał Iglewski, Jan Madey, Stanisław Matwin: Pascal. Język wzorcowy – Pascal 360. Wyd. trzecie – zmienione. Warszawa: Wydawnictwa Naukowo-Techniczne, 1984, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-85060-53-7. ISSN 0867-6011. (pol.).
- ↑ Ralph E. Griswold, Madge T. Griswold: Icon. Warszawa: Wydawnictwa Naukowo-Techniczne, 1987, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-0871-7. (pol.).
- ↑ Niklaus Wirth: Modula 2. Warszawa: Wydawnictwa Naukowo-Techniczne, 1987, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-0828-8. ISSN 0867-6011. (pol.).
- ↑ Jan Bielecki: PL/M język programowania mikroprocesorów. Wyd. drugie uzupełnione. Warszawa: Wydawnictwa Komunikacji i Łączności, 1987, seria: Elektronizacja. zeszyt 25. (pol.).
- ↑ Jan Bielecki: System operacyjny ISIS-II. Warszawa: Wydawnictwa Naukowo-Techniczne, 1987, seria: Mikrokomputery. ISBN 83-204-0893-8. (pol.).