+ All Categories
Home > Documents > Структура на програма в C - Част...

Структура на програма в C - Част...

Date post: 25-Aug-2020
Category:
Upload: others
View: 3 times
Download: 0 times
Share this document with a friend
22
Структура на програма в C Част 1 Иван Георгиев, Христо Иванов, Христо Стефанов Tехнологическо училище "Електронни системи", Технически университет, София 22 февруари 2019 г. И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS) Структура на програма в C ELSYS 1 / 22
Transcript
Page 1: Структура на програма в C - Част 1lubo.elsys-bg.org/.../uploads/2019/02/lexing-parsing1.pdfДесетичен запис - 1.0, 3.14 Шестнадесетичен

Структура на програма в CЧаст 1

Иван Георгиев, Христо Иванов, Христо Стефанов

Tехнологическо училище "Електронни системи",Технически университет, София

22 февруари 2019 г.

И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 1 / 22

Page 2: Структура на програма в C - Част 1lubo.elsys-bg.org/.../uploads/2019/02/lexing-parsing1.pdfДесетичен запис - 1.0, 3.14 Шестнадесетичен

Съдържание

1 Синтаксис на програмен език

2 Лексикален анализ и лексеми

3 Лексеми в езика C

4 Синтактичен анализ и правила върху лексеми

5 Синтактичен анализ в C

И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 2 / 22

Page 3: Структура на програма в C - Част 1lubo.elsys-bg.org/.../uploads/2019/02/lexing-parsing1.pdfДесетичен запис - 1.0, 3.14 Шестнадесетичен

Съдържание

1 Синтаксис на програмен език

2 Лексикален анализ и лексеми

3 Лексеми в езика C

4 Синтактичен анализ и правила върху лексеми

5 Синтактичен анализ в C

И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 3 / 22

Page 4: Структура на програма в C - Част 1lubo.elsys-bg.org/.../uploads/2019/02/lexing-parsing1.pdfДесетичен запис - 1.0, 3.14 Шестнадесетичен

Синтаксис на програмен език

Синтаксис на програмен език е набор от правила. Тези правилаопределят комбинациите от символи, които съставят валиднопарче код на този език.Когато един компилатор компилира програма, той извършвасинтактичен анализ на програмния код.Най-често преди извършването на синтактичния анализ сеизвършва лексикален анализ, който помага за по-леснотоизвършване на синтактичния анализ.След приключването на синтактичния анализ се извършвасемантичен анализ, който проверява дали програмата е смисленопостроена.

И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 4 / 22

Page 5: Структура на програма в C - Част 1lubo.elsys-bg.org/.../uploads/2019/02/lexing-parsing1.pdfДесетичен запис - 1.0, 3.14 Шестнадесетичен

Съдържание

1 Синтаксис на програмен език

2 Лексикален анализ и лексеми

3 Лексеми в езика C

4 Синтактичен анализ и правила върху лексеми

5 Синтактичен анализ в C

И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 5 / 22

Page 6: Структура на програма в C - Част 1lubo.elsys-bg.org/.../uploads/2019/02/lexing-parsing1.pdfДесетичен запис - 1.0, 3.14 Шестнадесетичен

Лексикален анализ

Лексикалният анализ е етап, при който поредица от символи сепревръща в поредица от лексеми.Лексемите са низове от символи с предварително зададенозначениеБроят, смисълът и начина на разпознаване на лексеми зависи отезика

И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 6 / 22

Page 7: Структура на програма в C - Част 1lubo.elsys-bg.org/.../uploads/2019/02/lexing-parsing1.pdfДесетичен запис - 1.0, 3.14 Шестнадесетичен

Лексеми - пример

Примерен лексикален анализ на български език:Лексеми

РАЗСТОЯНИЕ - един или повече символи за празно мястоДУМА - един или повече символи от българската азбукаПУНКТУАЦИОНЕН ЗНАК - един от символите - запетая, тире,точка, точка и запетая, две точки.

Редица от символи:Иван дойде по-късно днес.

Резултат[ ДУМА, РАЗСТОЯНИЕ, ДУМА, РАЗСТОЯНИЕ, ДУМА,ПУНКТУАЦИОНЕН ЗНАК, ДУМА, РАЗСТОЯНИЕ, ДУМА,ПУНКТУАЦИОНЕН ЗНАК ]

И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 7 / 22

Page 8: Структура на програма в C - Част 1lubo.elsys-bg.org/.../uploads/2019/02/lexing-parsing1.pdfДесетичен запис - 1.0, 3.14 Шестнадесетичен

Съдържание

1 Синтаксис на програмен език

2 Лексикален анализ и лексеми

3 Лексеми в езика C

4 Синтактичен анализ и правила върху лексеми

5 Синтактичен анализ в C

И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 8 / 22

Page 9: Структура на програма в C - Част 1lubo.elsys-bg.org/.../uploads/2019/02/lexing-parsing1.pdfДесетичен запис - 1.0, 3.14 Шестнадесетичен

Лексеми в езика C

Основните лексеми в езика C са:идентификатор (identifier)константа (constant)низов литерал (string literal)пунктуатор (punctuator)коментар (comment)празно място (white space)

И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 9 / 22

Page 10: Структура на програма в C - Част 1lubo.elsys-bg.org/.../uploads/2019/02/lexing-parsing1.pdfДесетичен запис - 1.0, 3.14 Шестнадесетичен

Идентификатори

Идентификатор - някой от символите - ’_’, ’A’ до ’Z’, ’a’до ’z’ - следван от нула или повече от следните символи- ’_’, ’A’ до ’Z’, ’a’ до ’z’, ’0’ до ’9’Примери:

a, A, b, _, HELLo, _hello, ___hello, hello1234,hello_world

Фигура 1: Диаграма

И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 10 / 22

Page 11: Структура на програма в C - Част 1lubo.elsys-bg.org/.../uploads/2019/02/lexing-parsing1.pdfДесетичен запис - 1.0, 3.14 Шестнадесетичен

Ключови думи

Ключовите думи са лексеми, които отговарят на описанието заидентификатори, но имат различен смисъл в езика от този наидентификаторите.Списък на ключовите думи в C:

auto break case charconst continue default dodouble else enum externfloat for goto ifint long register returnshort signed sizeof staticstruct switch typedef unionunsigned void volatile while

И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 11 / 22

Page 12: Структура на програма в C - Част 1lubo.elsys-bg.org/.../uploads/2019/02/lexing-parsing1.pdfДесетичен запис - 1.0, 3.14 Шестнадесетичен

Константи

Константа - цяло число в десетичен, шестнадесетичен, осмиченили символен запис1 или рационално число в десетичен илишестнадесетичен записПримери:

Цели числаДесетичен запис - 1, 2, 2019Шестнадесетичен запис - 0x1f, 0x003, 0xabcdef, 0xABCDEFОсмичен запис - 0123, 0777Символен запис - ’j’, ’0’, ’\0’, ’\n’, ’\152’, ’\x6A’

Рационални числаДесетичен запис - 1.0, 3.14Шестнадесетичен запис - 0x1f.3bp0

1Обяснение на следващия слайдИ. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 12 / 22

Page 13: Структура на програма в C - Част 1lubo.elsys-bg.org/.../uploads/2019/02/lexing-parsing1.pdfДесетичен запис - 1.0, 3.14 Шестнадесетичен

Символен запис

Символният запис на цели числа e символ ограден от единичникавички - ’Стойността на числото записано чрез символен запис сеопределя от номера в ASCII таблицата2 на оградениясимволПримери

’a’, ’b’, ’c’, ’!’, ’?’, ’_’ → 97, 98, 99, 33, 63, 95

За символите от ASCII таблицата, които нямат определенграфичен символ (non-printable characters, напримерсимвол за нов ред, нулев символ) се налага използванетона специални последователности

Когато ограденият символ е ’ също се налага използванетона специална последователност

2http://www.asciitable.com/И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 13 / 22

Page 14: Структура на програма в C - Част 1lubo.elsys-bg.org/.../uploads/2019/02/lexing-parsing1.pdfДесетичен запис - 1.0, 3.14 Шестнадесетичен

Специални последователности от символи

Специалните последователности (escape sequences) сапоследователности от символи, които се интерпретират като единсимвол от ASCII таблицата.

Последователност Наименование Номер в ASCII\a alarm or beep 7\b backspace 8\f form feed 12\n new line 10\r carriage return 13\t tab (horizontal) 9\v vertical tab 11\\ backslash 92\’ single quote 27\" double quote 22\? question mark 63\nnn octal number nnn\xhh hexadecimal number hh\0 null 0

И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 14 / 22

Page 15: Структура на програма в C - Част 1lubo.elsys-bg.org/.../uploads/2019/02/lexing-parsing1.pdfДесетичен запис - 1.0, 3.14 Шестнадесетичен

Специални последователности от символи - примери

Символни записи използващи специални последователности’\n’, ’\t’’\”, ’\\’’\047’, ’\092’’\x27’, ’\x5c’

И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 15 / 22

Page 16: Структура на програма в C - Част 1lubo.elsys-bg.org/.../uploads/2019/02/lexing-parsing1.pdfДесетичен запис - 1.0, 3.14 Шестнадесетичен

Низов литерал

Низов литерал (string literal) - низ от символи оградени с двойникавички - ’"’. Може да съдържа специални последователностиот символи.Примери:

"Hello world""asdf""First line\nSecond\tline""String literal with \"quotes\" is also possible""Single quotes don’t need escape sequences in stringliterals"

И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 16 / 22

Page 17: Структура на програма в C - Част 1lubo.elsys-bg.org/.../uploads/2019/02/lexing-parsing1.pdfДесетичен запис - 1.0, 3.14 Шестнадесетичен

Пунктуатори

Пунктуатор (punctuator) - някоя от следните комбинации отпунктуационни символи:

[ ] ( ) { } . ->& * + - ~ !++ – / ? = ,% << >> < > <= >=: ; ...*= /= %= += -= <<=== >>= != &= ˆ| ˆ= && || |=

И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 17 / 22

Page 18: Структура на програма в C - Част 1lubo.elsys-bg.org/.../uploads/2019/02/lexing-parsing1.pdfДесетичен запис - 1.0, 3.14 Шестнадесетичен

Съдържание

1 Синтаксис на програмен език

2 Лексикален анализ и лексеми

3 Лексеми в езика C

4 Синтактичен анализ и правила върху лексеми

5 Синтактичен анализ в C

И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 18 / 22

Page 19: Структура на програма в C - Част 1lubo.elsys-bg.org/.../uploads/2019/02/lexing-parsing1.pdfДесетичен запис - 1.0, 3.14 Шестнадесетичен

Синтактичен анализ и правила върху лексеми

Синтактичният анализ е етап, при който поредицата от лексеми,получена от лексикалния анализ, се проверява дали отговаря насинтактичните правила на езикаПример:

Фигура 2: Непълна диаграма за изречение на български език

И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 19 / 22

Page 20: Структура на програма в C - Част 1lubo.elsys-bg.org/.../uploads/2019/02/lexing-parsing1.pdfДесетичен запис - 1.0, 3.14 Шестнадесетичен

Съдържание

1 Синтаксис на програмен език

2 Лексикален анализ и лексеми

3 Лексеми в езика C

4 Синтактичен анализ и правила върху лексеми

5 Синтактичен анализ в C

И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 20 / 22

Page 21: Структура на програма в C - Част 1lubo.elsys-bg.org/.../uploads/2019/02/lexing-parsing1.pdfДесетичен запис - 1.0, 3.14 Шестнадесетичен

Синтаксис на аритметичен израз

Фигура 3: Непълна диаграма за аритметичен израз в C

И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 21 / 22

Page 22: Структура на програма в C - Част 1lubo.elsys-bg.org/.../uploads/2019/02/lexing-parsing1.pdfДесетичен запис - 1.0, 3.14 Шестнадесетичен

Синтаксис на декларация на променлива

Фигура 4: Непълна диаграма за декларация на променлива в C

И. Георгиев, Х. Иванов, Х. Стефанов (ELSYS)Структура на програма в C ELSYS 22 / 22


Recommended