- •Лекция № 2
- •Введение
- •1. Основные синтаксические и семантические правила
- •1.1. Общая структура программы и данных
- •1.2. Типы данных, их организация в памяти и литералы
- •1.3. Ввод и вывод значений
- •1.4. Литералы значений
- •Литералы целых чисел
- •Литералы вещественных чисел
- •Перевод чисел в системы с другим основанием
- •Строковые литералы
- •Литералы массивов
- •Литералы объектов
- •1.5. Операции и выражения
- •Арифметические операции
- •Строковые операции
- •Операции сравнения
- •Компонентные операции
- •Операции присваивания
- •Другие операции
- •Синтаксис и семантика выражений
- •1.6. Дополнительные понятия и правила синтаксиса Ограничения на идентификаторы
- •Комментарии
- •Лексемы, пробельные символы и комментарии
- •2. Регулярные структуры данных
- •2.1. Многомерные массивы
- •2.2. Рекурсивные структуры объектов
- •Деревья
1.6. Дополнительные понятия и правила синтаксиса Ограничения на идентификаторы
Вводимые пользователем идентификаторы не должны совпадать с ключевыми и зарезервированными словамиязыка и именами стандартных (системных) функций, свойств и переменных. Со стандартными именами мы ещё познакомимся (некоторые у нас уже встречались –alert,toStringи другие), а ключевые слова перечислены ниже (некоторые из них входят в операторы, которые мы ещё будем изучать):
break do if switch typeof
case else in this var
catch false new throw void
continue finally null true while
default for return try with
delete function
Комментарии
Любой текст, присутствующий между символами //и концом строки, рассматривается каккомментарийи игнорируется (вместе с символами//)JavaScript. Любой текст между символами/*и*/также рассматривается каккомментарий(вместе с символами/*и*/). Эти комментарии могут состоять из нескольких строк и не могут быть вложенными. Следующие строки кода представляют собой корректныеJavaScript-комментарии:
s=1+ // Это однострочный комментарий.
''/* Это тоже комментарий */5//Другой комментарий.
/* alert(s) выдаст "15"
* Это ещё один комментарий.
* Он располагается в нескольких строках.
*/
Лексемы, пробельные символы и комментарии
Весь текст программы разделяют на лексемы. Лексема– это наименьшая последовательность символов, имеющая самостоятельное синтаксическое или семантическое значение. В языкеJavaScriptлексемами являютсяимена(идентификаторы),числа,строки,ключевые слова,операциии отдельные знаки, играющие рольразделителей(;,,,(,),", / и др.).
Лексемы являются неделимымисимволами, т.е. в них нельзя использовать пробельные символы (пробел, табуляция, новая строка) и комментарии. Пробелы и комментарии могут входить в строки только в качестве отдельных символов строки.
Пробельные символы и комментарии не считаются лексемами. Их безболезненно можно удалить отовсюду, кроме тех мест, где их использование необходимо в качестве разделителя лексем, например, где отсутствие разделителя не позволяет правильно распознать лексему. Так, удаление пробела в операторе var x=1 даст совсем другой оператор varx=1.
Также для удобства чтения и отладки их можно вставлять между любыми лексемами. Только при вставке символа новой строки следует опасаться ситуации, когда один оператор будет разбит на два, что может привести к неправильной работе программы. Например, вставка новой строки в оператор return xравносильна вставке точки с запятой и даст два оператораreturn; x, что приведёт к неправильной работе программы.
2. Регулярные структуры данных
Выше говорилось, что из массивов и других объектов можно с помощью ссылок строить сложные структуры данных. На практике часто структуры данных обладают определённой регулярностью. Регулярностьподразумевает использование не произвольных объектов, а объектов, имеющих определённый тип из некоторого заданного набора типов, а также связывание объектов ссылками по определённым правилам.
Тип массива(подтип типамассив) определяется типом значений его элементов и количеством элементов (последнее для языкаJavaScriptне очень актуально).Тип объекта(подтип типаобъект) определяется набором свойств, типом их значений, а также набором методов. В языкеJavaScriptможно определить структуру объекта (см. следующую лекцию), но нельзя задать тип его элементов. В компилируемых языках такая возможность всегда имеется.
Здесь мы рассмотрим некоторые часто используемые регулярные структуры данных