Основой любого языка является его алфавит.
Алфавит – это совокупность допустимых символов языка или групп символов, рассматриваемых как единое целое. Алфавит определяет, из каких элементарных единиц в языке могут строиться более крупные конструкции. В языке программирования, который должен понимать компьютер, к тому же каждый символ алфавита необходимо кодировать уникальным целым числом в соответствии с некоторыми правилами. В С# правила кодировки задаются используемой кодовой таблицей Unicode.
Первые 128 символов Unicode представлены в таблице 4.1. Остальные страницы кодировки используются для размещения символов всех существующих национальных алфавитов одновременно, что, безусловно, очень удобно, но естественно значительно увеличивает требуемый объем памяти.
Алфавит языка С# включает следующее множество символов:
- десять арабских цифр (от 0 до 9);
- буквы (латинские и национальных алфавитов) и символ подчеркивания;
- специальные символы, например:
{ } ( ) [ ] : ; + - * / < > =
- пробел и символы табуляции;
- символ перевода строки.
Из символов составляются более крупные строительные блоки: лексемы, директивы препроцессора и комментарии.
Таблица 4.1 – Первые 128 символов Unicode
Код
| Символ
| Код
| Символ
| Код
| Символ
| Код
| Символ
|
| !
|
|
|
| Q
|
| i
|
| "
|
| :
|
| R
|
| j
|
| #
|
| ;
|
| S
|
| k
|
| $
|
| <
|
| T
|
| l
|
| %
|
| =
|
| U
|
| m
|
| &
|
| >
|
| V
|
| n
|
| '
|
| ?
|
| W
|
| o
|
| (
|
| @
|
| X
|
| p
|
| )
|
| A
|
| Y
|
| q
|
| *
|
| B
|
| Z
|
| r
|
| +
|
| C
|
| [
|
| s
|
| ,
|
| D
|
| \
|
| t
|
| -
|
| E
|
| ]
|
| u
|
| .
|
| F
|
| ^
|
| v
|
| /
|
| G
|
| _
|
| w
|
|
|
| H
|
| `
|
| x
|
|
|
| I
|
| a
|
| y
|
|
|
| J
|
| b
|
| z
|
|
|
| K
|
| c
|
| {
|
|
|
| L
|
| d
|
| |
|
|
|
| M
|
| e
|
| }
|
|
|
| N
|
| f
|
| ~
|
|
|
| O
|
| g
|
|
|
|
|
| P
|
| h
|
|
|
4.2.2 Лексемы языка, директивы препроцессора и комментарии
Лексема – это минимальная единица языка, имеющая самостоятельный смысл. Существуют следующие виды лексем:
- имена (идентификаторы);
- ключевые слова;
- знаки операций;
- разделители;
- литералы (константы).
Из лексем составляются еще более крупные конструкции языка: выражения и операторы. Рассмотрим некоторые из лексем.
Идентификатор- это имя любого объекта программы, определяемого пользователем. Он может включать в себя Unicode-буквы (не только латинские, но и буквы национальных алфавитов), цифры, символ подчеркивания. Прописные и строчные буквы различаются. Допустимо использование десяти арабских цифр (от 0 до 9), которые в имени могут присутствовать в любой позиции, кроме первой. Символ подчеркивания может находиться в любой позиции. Длина идентификатора не ограничивается.
В процессе обучения программированию в С# для краткости часто используются однобуквенные имена. В реальных программах разработчики предпочитают использовать многобуквенные и даже многословные идентификаторы, которые позволяют в имени отразить смысловое содержание элемента. В С# для записи многословных идентификаторов прижились две нотации: Паскаля, когда каждое слово, составляющее идентификатор, начинается с прописной буквы, например: MaxInterval и Camel, которая предлагает с прописной буквы начинать каждое слово, составляющее идентификатор, кроме первого, например: maxInterval. Слова в имени могут быть соединены и знаком подчеркивания: max_Interval.
Разделители предназначены для отделения друг от друга идентификаторов, чисел, зарезервированных слов. В качестве разделителей применяются: пробел, табуляция, символ новой строки, комментарий.
В C# принято, что в любом месте, где можно поместить один разделитель, их можно поместить любое количество и в любом сочетании. Это позволяет наглядно оформлять программу, улучшать ее читаемость.
Комментарий многострочный заключается между символами-скобками /* и */, однострочный начинается с двух косых черт. В комментариях даются пояснения к программе. Компилятор их игнорирует.
В С# выделяют ключевые слова и директивы препроцессора, отличающиеся по своим функциям.
Таблица 4.2–Ключевые слова С#
abstract
| as
| base
| bool
| break
| byte
| case
|
catch
| char
| checked
| class
| const
| continue
| decimal
|
default
| delegate
| do
| double
| else
| enum
| event
|
explicit
| extern
| false
| finally
| fixed
| float
| for
|
foreach
| goto
| if
| implicit
| in
| int
| interface
|
internal
| is
| lock
| long
| namespace
| new
| null
|
object
| operator
| out
| override
| params
| private
| protected
|
public
| readonly
| ref
| return
| sbyte
| sealed
| short
|
sizeof
| stackalloc
| static
| string
| struct
| switch
| this
|
throw
| true
| try
| typeof
| uint
| ulong
| unchecked
|
unsafe
| ushort
| using
| virtual
| void
| volatile
| while
|
Ключевые слова (табл. 4.2) имеют раз и навсегда закрепленные значения. Ключевые слова нельзя использовать в качестве имен переменных, классов или методов. В языке существуют так называемые контекстно-зависимые слова: get, set,yield, value, where, partiel, которые также желательно не использовать в качестве имен других элементов программы.
При записи элементы языка (имена, константы, ключевые слова) нельзя сливать, они должны друг от друга отделяться разделителем.
Директивы препроцессора используются на предварительной стадии компиляции, на которой формируется окончательный вид исходного текста программы. Например, с помощью директив можно включить или выключить из процесса компиляции фрагменты кода.
Знак операции – это один или более символов, определяющих действие над операндами. Внутри знака операции пробелы не допускаются.