149.70K
Категория: ПрограммированиеПрограммирование

Работа виртуальной Си-машины на двух этапах

1.

Работа виртуальной Си-машины на двух этапах

2.

В
квадратных
скобках
необязательные элементы.
записывают
Если в правой части БНФ выбирается одна из
возможных конструкций, то эти альтернативы
разделяются вертикальной чертой «|».
Пример 12.
<программа> ::= <последовательность директив
препроцессора>
<заголовок
программы>
{ <тело программы> }
<последовательность директив препроцессора>
::= <директива> [<директива>…]

3.

<директива>::=#<тело директивы>
<заголовок программы> ::= int main([<список
аргументов>])
< список аргументов >
[,<имя аргумента>…]
::= <имя аргумента>
<имя аргумента> ::= <имя>
<имя> ::= <буква> | <имя><буква> | <имя>
<цифра>
<тело программы>::=<оператор>; [<оператор>; …]
<оператор>::=<оператор описания> |
<исполнимый оператор>

4.

2.2. Синтаксические диаграммы
Синтаксические
диаграммы
состоят
из
прямоугольников, кругов и овалов, соединённых
стрелками.
В прямоугольниках записываются конструкции
языка, которые будут определены в других
синтаксических диаграммах.
В кружках записываются зарезервированные
символы языка.
В овалах – зарезервированные слова языка.

5.

Название определяемой конструкции языка
записывают над стрелкой, входящей в
синтаксическую диаграмму.
Признаком конца синтаксической диаграммы
является стрелка, выходящая из неё.

6.

3. Типы, операторы и выражения в языке Си
Основные объекты программы:
- константы;
- переменные.
В Си требуется, чтобы все переменные были
объявлены
оператором
описания
(декларирования)
до
первого
их

7.

В декларациях устанавливаются типы и,
возможно, значения.
Имена переменных могут состоять из букв
(только из латинского алфавита), цифр и
символа подчеркивания, приравненного к букве.
Начинаться имя должно с буквы. C символа
подчеркивания начинаются внутренние имена
встроенных библиотечных функций.
Правильные имена: a, c1, x12_45g, begin_of_1.
Неправильные имена: 1а, 12-78, _of_1.
Язык Cи регистрозависимый, т.е. в именах
различаются маленькие и большие буквы.
Разные имена: ab, Ab, aB, AB.

8.

Нельзя использовать в качестве имён ключевые
слова языка Cи.
Например, int, if, for, char .
Пример 13.
#include <stdio.h>
#define N 12
int main() {
int i, main1[N], first_day_of_year;

}

9.

Базовые типы Си
- char – единичный байт, содержащий одну
литеру из допустимого набора (ASCII);
- int – целое число;
- float – вещественное одинарной точности;
- double – вещественное удвоенной точности.
В C различают два вида квалификаторов:
1) длины (применимы
опускать):
- short;
- long;
к
целым,
int
можно

10.

2) знака (применимы к символьному и любому
целому типу):
- signed;
- unsigned.
limits.h в этом файле устанавливаются
размеры типов.
float.h в этом файле устанавливаются
константы с плавающей точкой.
Размер short ≤ Размер int ≤ Размер long

11.

Типичная реализация типов в языке Cи
Тип
unsigned char
char
unsigned short
short
unsigned int
int
unsigned long
long
Размер,
бит
8
8
16
16
16
16
32
32
float
32
double, long double 64
Диапазон
0..255
-128..127
0..65535
-32768..32767
0..65535
-32768..32767
0..4294967245
-2147483648
..2147483647
3.4e-38..3.4e+38
1.7e-308..1.7e+308

12.

Тип «пустой» (void) – отсутствие какого-либо
значения.
Логический тип, который моделируется целым
типом: ложь = 0, истина = не 0.
В С++ присутствует базовый логический тип –
bool (1 байт).
Тип
указатель.
Переменная-указатель
содержит адрес ячейки памяти.
Указатель на void – указатель на данные любого
типа (может быть приведен к указателю на
любой тип).

13.

!!! «Размерность типа» зависит от версии
компилятора, разрядности ОС, модели данных
компилятора и ОС.
Для
определения
количества
байтов,
выделяемых под тип, используется оператор
sizeof.
int j;
j=sizeof(double);
DOS: Turbo C Win32:
Win64:
2.0, Turbo C++ Visual
Visual Studio
3.0
Studio (С++) (С++)
sizeof(int)
2
4
4
sizeof(int*)
2
4
8
sizeof(long)
4
4
4

14.

Константы
В

для
целочисленных
констант
поддерживаются три системы счисления.
10 с/с: цифры от 0 до 9, не могут начинаться с
0.
8 с/с: цифры от 0 до 7, начинаются с 0.
16 с/с: цифры от 0 до 9, буквы A..F (a..f)
начинаются с 0х или 0Х.
170
/*десятичная*/
0252
/*восьмеричная*/

15.

0хАА
/*шестнадцатеричная*/
170L
/*десятичная длинная*/
0252L
/*восьмеричная длинная*/
0ХAАL
/*шестнадцатеричная длинная*/
Во внутреннем представлении, если целая
константа
превысила
16
разрядов

автоматически представляется как 32 разряда
(10 с/с).

16.

Если
значение
8-ой
или
16-ой константы превысило наибольшее целое
без знака, то оно также будет представлено, как
длинное беззнаковое.
Вещественная константа: 0.1e-2, 0.01.
Символьная константа: ‘a’, ‘9’, ‘M’.
Существуют
специальные
символьные
константы: ESC-последовательности:
- ‘\’’ – апостроф;
- ‘\’’’ – двойные кавычки;

17.

- ‘\0’ – пустой символ;
- ‘\n’ – новая строка;
- ‘\\’ – обратная косая черта.
Символьная константа имеет целый тип и
занимает один байт: ‘9’=57.
Восьмиричный
код
символа
последовательность трех цифр: ‘\ddd’.

Строковая константа: “программирование”,
“программная инженерия”.
Строковая константа – это массив символов, в
конце которого вставлен код признака конца
строки - \0.

18.

“ПИ”
П
И
\0
Именованные константы:
#define <имя> <текст>
<имя> - символьное имя.
<текст> - последовательность литер.
#define N 100

char str[N+1];
По тексту программы производится замена
<имя> на <текст> на этапе компиляции
(память под такую константу не выделяется).

19.

Замена не происходит:
- внутри строковых констант;
- если цепочка, составляющая имя, является
частью определения другого имени.
#define N 100
#define NNN 10
Особенности синтаксиса:
- имена констант традиционно состоят из
заглавных букв;
- не нужно писать декларации (определять
переменную);
- после #define не нужна «;».
English     Русский Правила