48702 (Разработка формальных грамматик)

2016-07-29СтудИзба

Описание файла

Документ из архива "Разработка формальных грамматик", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "контрольные работы и аттестации", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "48702"

Текст из документа "48702"

Разработка формальных грамматик

1. Следуя условиям задания, исходя из заданных операций и их приоритетов, была построена следующая грамматика:

Просмотр выражения и свертка слева-направо.

ВЫРАЖЕНИЕ = А_ВЫР!

Л_ВЫР.

Л_ВЫР = Л_ВЫР «EQU» Л_ОПЕР1! // Операция леворекурсивная=>свертка слева-направо

Л_ОПЕР1.

Л_ОПЕР1 = Л_ОПЕР1 «XOR» Л_ОПЕР2!

Л_ОПЕР1 «OR» Л_ОПЕР2!

Л_ОПЕР2.

Л_ОПЕР2 = Л_ОПЕР2 «AND» Л_ОПЕР3!

Л_ОПЕР3.

Л_ОПЕР3 = «NOT» ЗНАК!

ЗНАК.

ЗНАК = А_ВЫР ОПЕР_СР А_ВЫР.

А_ВЫР = А_ВЫР «+» А_ОПЕР1!

А_ВЫР «–» А_ОПЕР1!

А_ОПЕР1.

А_ОПЕР1 = А_ОПЕР1 «*» А_ОПЕР2!

А_ОПЕР2.

А_ОПЕР2 = А_ОПЕР2 «MOD» А_ОПЕР3!

А_ОПЕР3.

А_ОПЕР3 = А_ОПЕР4 «^» А_ОПЕР3! // Операция праворекурсивная=>свертка справа-налево

А_ОПЕР4.

А_ОПЕР4 = FUNK «(«А_ВЫР «)»!

FUNK «(» ИД_К «)»!

«(» А_ВЫР «)»!

ИД_К.

ИД_К = ИД!

КОНСТ.

ИД = «DOUBLE»!

«INTEGER»!

«STRING».

КОНСТ = «КОНСТ_10»!

«КОНСТ_16»!

«КОНСТ_2».

FUNK = «LEFT»!

«SIN».

ОПЕР_СР = «<»!

«> »!

«<=»!

«>=»!

«<> »!

«=».

EOG

2. Построим матрицу предшествования исходной грамматики в соответствии с требованиями метода параллельного предшествования:

Матрица содержит конфликты:

* строка 1, столбец 31: 1 – конфликт типа =,<

* строка 2, столбец 32: 1 – конфликт типа =,<

* строка 3, столбец 32: 1 – конфликт типа =,<

* строка 6, столбец 36: 1 – конфликт типа =,<

* строка 7, столбец 36: 1 – конфликт типа =,<

* строка 8, столбец 37: 1 – конфликт типа =,<

* строка 11, столбец 29: 1 – конфликт типа =,<

* строка 11, столбец 41: 1 – конфликт типа =,<

* строка 21, столбец 29: 4 – конфликт типа >, X

* строка 22, столбец 29: 4 – конфликт типа >, X

* строка 23, столбец 29: 4 – конфликт типа >, X

* строка 24, столбец 29: 4 – конфликт типа >, X

* строка 25, столбец 29: 4 – конфликт типа >, X

* строка 26, столбец 29: 4 – конфликт типа >, X

* строка 35, столбец 29: 1 – конфликт типа =,<

Отладка

Для наглядности построим дерево:

Конфликт 1-го типа:

Л ВЫР




Л ВЫР

“EQU”

Л ОПЕР1



Л ОПЕР1

Л ОПЕР1

“OR”

Л ОПЕР2


Для избежания конфликтов 1-го типа введем новые правила:

Л_ВЫР = Л_ВЫР «EQU» Л_ОПЕР11!

Л_ОПЕР1.

Л ВЫР

Л_ОПЕР11 = Л_ОПЕР1.


К

Л ВЫР

“EQU”

Л ОПЕР11

онфликт ликвидирован и рекурсия сохранена.

Л ОПЕР1


Л ОПЕР1



Л ОПЕР1

“OR”

Л ОПЕР2


При ликвидации конфликтов 1-го типа исчезают конфликты 4-го типа.

Получим новую бесконфликтную грамматику:

ВЫРАЖЕНИЕ = А_ВЫР!

Л_ВЫР.

Л_ВЫР = Л_ВЫР «EQU» Л_ОПЕР11!

Л_ОПЕР1.

Л_ОПЕР11 = Л_ОПЕР1.

Л_ОПЕР1 = Л_ОПЕР1 «XOR» Л_ОПЕР22!

Л_ОПЕР1 «OR» Л_ОПЕР22!

Л_ОПЕР2.

Л_ОПЕР22 = Л_ОПЕР2.

Л_ОПЕР2 = Л_ОПЕР2 «AND» Л_ОПЕР3!

Л_ОПЕР3.

Л_ОПЕР3 = «NOT» ЗНАК!

ЗНАК.

ЗНАК = А_ВЫР ОПЕР_СР А_ВЫР2.

А_ВЫР2 = А_ВЫР.

А_ВЫР = А_ВЫР «+» А_ОПЕР11!

А_ВЫР «–» А_ОПЕР11!

А_ОПЕР1.

А_ОПЕР11 = А_ОПЕР1.

А_ОПЕР1 = А_ОПЕР1 «*» А_ОПЕР22!

А_ОПЕР2.

А_ОПЕР22 = А_ОПЕР2.

А_ОПЕР2 = А_ОПЕР2 «MOD» А_ОПЕР3!

А_ОПЕР3.

А_ОПЕР3 = А_ОПЕР4 «^«А_ОПЕР3!

А_ОПЕР4.

А_ОПЕР4 = FUNK «(» А_ВЫР2»)"!

FUNK «(» ИД_К1»)"!

«(» А_ВЫР2»)»!

ИД_К.

ИД_К1 = ИД_К.

ИД_К = ИД!

КОНСТ.

ИД = «DOUBLE»!

«INTEGER»!

«STRING».

КОНСТ = «КОНСТ_10»!

«КОНСТ_16»!

«КОНСТ_2».

FUNK = «LEFT»!

«SIN».

ОПЕР_СР = «<»!

«> »!

«<=»!

«>=»!

«<> »!

«=».

EOG

Построим матрицу предшествования бесконфликтной грамматики:

4. Разработка сканера

1) Определяем лексемы языка

Табл.1. Лексемы языка

Обозначение лексемы

Смысл лексемы

конст_10

Десятичная константа

конст_16

Шестнадцатеричная константа (префикс &H)

конст_2

Двоичная константа (префикс &B)

ид_р

Идентификатор (integer, double или string)

sin

Синус вещественного числа

left

Функция работы со строками

not

Логическое «НЕ»

and

Логическое «И»

or

Логическое «ИЛИ»

xor

Исключающее «ИЛИ»

разделитель

Пробел

+

Арифметическая операция сложения

-

Арифметическая операция вычитания

*

Арифметическая операция умножения

mod

Арифметическая операция целочисленное деление

^

Арифметическая операция возведения в степень

оо

Операция отношения (результат – логический)

(

Открывающая скобка

)

Закрывающая скобка

2) Разрабатываем базу данных сканера

Табл.2. Таблица одно-литерных

Табл.3. Таблица классов литер

терминальных символов

ТТС1

KTL

«а»

«z»

«A»

«C»

«K»

«M»

«Z»

Буквы

б

б

0

«B»

1

д

2

н

3

р

4

«+»

5

«–»

6

«*»

7

«^»

8

«H»

Шестнадцатеричный префикс

«H»

«=»

9

«B»

Двоичный префикс

«B»

«<»

10

«0»

«1»

Двоичные цифры

д

«> »

11

«#»

12

«2»

«9»

Недвоичные цифры

н

«%»

13

«$»

14

«(»

15

«»

Разделитель (пробел)

р

«)»

16

«+»

Сложение

«+»

«.»

17

«–»

Вычитание

«–»

«ы»

18

«*»

Умножение

«*»

«H»

19

«^»

Степень

«^»

Табл.4. Таблица типов лексем

«<»

Меньше

«<»

«> »

Больше

«> »

TLE

«=»

Равно

«=»

конст_10

0

«#»

Суффикс double

«#»

конст_16

1

«%»

Суффикс integer

«%

конст_2

2

«$»

Суффикс string

«$»

ид_р

3

«(»

Открывающая скобка

«(»

sin

4

«)»

Закрывающая скобка

«)»

left

5

«.»

Точка

«.»

not

6

Недопустимый символ

х

and

7

Конец файла

ы

or

8

xor

9

Табл.5. Таблица ключевых слов

equ

10

разделитель

11

ТКС

+

12

sin

-

13

left

*

14

not

mod

15

and

^

16

or

оо

17

xor

(

18

equ

)

19

mod

Временные таблицы:

Табл.6. Таблица идентификаторов

ТИ

Ид

описатели

адр

тип

точка

точность

осн

Табл.7. Таблица констант

ТК

конст

описатели

тип

точка

точность

осн

Табл.8. Таблица операций и специальных символов

ТОС

символ

Табл.9. Таблица стандартных символов

ТСС

TLE

ALE

3) Каждый тип лексических единиц описываем с помощью автоматной грамматики и для каждой грамматики составляем эквивалентный ей конечный автомат.

  • конст_10

S = нD1! дD1.

D1 = нD1! дD1!». «D2! е.

D2 = нD3! дD3.

D3 = нD3! дD3! е.

е = «"! «*»!» –"! «+»! «*»! «/"! «^»!»)"! «=»! «».

н,д

н,д



D1

F

н,д

"."

н,д

е

D2

D3

S


е




  • конст_2

S = «&«B0.

B0 = «B» B1.

B1 = дB2.

B2 = дB2!». «B3! е.

B3 = дB4.

B4 = дB4! е.

е = «"! «*»!» –"! «+»! «*»! «/"! «^»!»)"! «=»! «».

д

д



S

"&"

B0

B2

B3

B4

F

"B"

д

"."

е

S

B1

д



е



  • конст_16

S = «&«B0.

B0 = «H» H1.

H1 = дH1! нH1! «A" H1! «B» H1! «C» H1! «D» H1! «E» H1! «F» H1! е.

е = «"! «*»!» –"! «+»! «*»! «/"! «^»!»)"! «=»! «».

д,н,"A".."F"


S

"&"

B0

F

"H"

е

S

H1



  • ид_р

S = бА! «B» A! «H» A.

А = бА! нА! дА! «A» A! «B» A! «C» A! «D» A! «E» A! «F» A! «H» A! «%«A2! «&«A2! «$«A2.

A2 = е.

е = «"! «*»!» –"! «+»! «*»! «/"! «^»!»)"! «=»! «».

б,н,д,"A".."F","H"


S

б,"B","H"

A

A2

F

"%","&","$"

е

е4

"s"

"i"

"n"



  • sin

S = «s» A4.

A4 = «i» A5.

A5 = «n» A6.

A6 = е4.

е4 = р! «(».

S

A4

A5

A6

F



  • left

S = «l» A7.

A7 = «e» A8.

A8 = «f» A9.

A9 = «t» A10.

A10 = е4.

е4 = р! «(».

S

A7

A8

A9

A10

"l"

"e"

"f"

"t"

F

е4


  • not

S = «n» A11.

A11 = «o» A12.

A12 = «t» A13.

A13 = е4.

е4 = р! «(».

S

A11

A12

A13

F

"n"

"o"

"t"

е4



  • and

S = «a» A14.

A14 = «n» A15.

A15 = «d» A16.

A16 = е4.

е4 = р! «(».

S

A14

A15

A16

F

"a"

"n"

"d"

е4



  • or

S = «o» A17.

A17 = «r» A18.

A18 = е4.

е4 = р! «(».

S

A17

A18

F

"o"

"r"

е4



  • xor

S = «x» A19.

A19 = «o» A20.

A20 = «r» A21.

A21 = е4.

е4 = р! «(».

S

A19

A20

A21

F

"x"

"o"

"r"

е4



  • equ

S = «e» A22.

A22 = «q» A23.

A23 = «u» A24.

A24 = е4.

е4 = р! «(».

S

A22

A23

A24

F

"e"

"q"

"u"

е4



  • разделитель

S = рR1.

R1 = рR1! e0

e0 – любой символ из ТТС1

р

e0


S

р

F

R1



  • +

S = «+«U1.

U1 = e3.

e3 = б! «B»! «H»! д! н! р! «&»! «(».

"+"

e3


S

F

U1


  • -

S = «– «U1.

U1 = e3.

e3 = б! «B»! «H»! д! н! р! «&»! «(».

"-"

e3


S

F

U1


  • *

S = «*«U1.

U1 = e3.

e3 = б! «B»! «H»! д! н! р! «&»! «(».

"*"

e3


S

F

U1


  • mod

S = «mod» U1.

U1 = e3.

e3 = б! «B»! «H»! д! н! р! «&»! «(».

"mod"

e3


S

F

U1


S = «^«U1.

U1 = e3.

e3 = б! «B»! «H»! д! н! р! «&»! «(».

"^"

e3


S

F

U1


  • оо

S = «<«O1! «>«O2! «=«O3.

O1 = «>«O4! «=«O4! e3.

O2 = «=«O5! e3.

O4 = e3.

O5 = e3.

O3 = e3.

e3 = б! «B»! «H»! д! н! р! «&»! «(».


  • (

S = «(«K1.

K1 = e2.

e2 = б! «B»! «H»! д! н! р! «+»!» –"! «&»! «(».

S

"("

K1

e2

F



  • )

S =»)«K2.

K2 = e.

е = «"! «*»!» –"! «+»! «*»! «^»!»)"! «=»! «».

S

")"

K2

e

F



4) Описываем использованные в сканере подпрограммы:

endПроцедура окончания работы сканера

podgotПроцедура производит общую подготовку сканера к работе

tipПроцедура устанавливает тип литеры

vklПроцедура добавляет текущую литеру в текущую лексему

cllПроцедура считывает из файла очередную литеру

zaptabПроцедура проверяет наличие текущей лексемы в таблице ключевых слов

outПроцедура заполняет основные таблицы

6) Пример работы сканера

Исходное выражение:

(sin (2*aa%-&B01)

Заполненные в результате работы сканера таблицы:

Табл.10. Таблица идентификаторов

ТИ

ид

описатели

адр

тип

точка

точность

осн

Aa%

Integer

0

2

10

0

Bb#

Double

1

16

10

2

Табл.11. Таблица констант

ТК

конст

Описатели

тип

точка

точность

осн

2

Integer

0

0

10

&B01

Bin

0

0

2

2

Integer

0

0

10

3

Integer

0

0

10

4

Integer

0

0

10

10

Integer

0

0

10

&H0

Hex

0

0

16

Табл.12. Таблица операций и специальных символов

ТОС

Символ

(

Sin

(

*

-

)

<

)

And

(

+

+

<

)

Xor

5. Синтаксический анализ выражения, которое использовалось в п. 2

Синтаксический анализ выполняет определенные функции:

1) выделение синтаксической конструкции

2) классификация синтаксической конструкции

3) определение синтаксической ошибки и, возможно, ее нейтрализация

4) в процессе синтаксического анализа формируется некоторая внутренняя форма представления программы.

Метод параллельного предшествования:

Отношение предшествования, используемые в методе параллельного предшествования:

< аналог отношения простого предшествования

= два символа входят в простую фразу

X>1Y, X – последний символ фразы, Y – следует за Х и находится правее соответствующей простой фразы и Y не является первым символом простой фразы.

X>

(>1)=(LAST) (=)

(><)=(LAST) (=) FIRST

Входная цепочка представляется в виде очереди, каждый элемент которой имеет два поля: S – символ цепочки и nx – указатель на следующий символ.

В алгоритме используются следующие обозначения:

TL – текущая литера

NTL – номер текущей литеры

PL – предыдущая литера

ST – следующая литера

SL – стек результата

ST2 – стек преобразований

ST.SIZE – размер стека

ST.PUSH – добавить в «голову» стека

ST.POP – взять (удалить) из «головы» стека

ST.RESET – очистить стек.

Блоки 2–4 производят инициализацию очереди (установка в начальное положение)

Блоки 5–6 производится проверка на наличие отношений между символами, если таковых не существует, то ошибка, иначе продолжается анализ

Блоки 7–10 осуществляется поиск простой фразы

Блоки 10–14 осуществляется редукция простой фразы на левую часть G[i]. 1 правило i из грамматики G

Блоки 15–17 осуществляется сохранение результата редукции и переход на следующий элемент

Блок 18 осуществляется проверка на окончание строки

Блоки 19–23 осуществляется проверка на окончание анализа, если анализ окончен, УСПЕХ, иначе сохранение результата и перевод в начало.

Сентенциальная форма:

1)# NOT A% MOD 5 0 #

2)# NOT ИД MOD конст_10 о_ср ИД AND ИД^ конст_10^ ИД – FUNK (конст_16+ ИД- ИД* ИД)+ конст_2 о_ср ИД #

3)# NOT ИД_К MOD ИД_К о_ср ИД_К AND ИД_К^ИДК^ИДК–FUNK (ИД_К+ ИД_К-ИД_К*ИД_К)+ ИД_К о_ср ИД_К #

4)# NOT A_4 MOD A_4 o_cp A_4 AND A_4^ A_4^ A_4 – FUNK (A_4+ A_4 – A_4* A_4)+ A_4 o_cp A_4 #

5)# NOT A_3 MOD A_3 o_cp A_3 AND A_4^ A_^ A_3 – FUNK (A_3 + A_3 – A_3 * A_3)+ A_3 o_cp A_3 #

6)# NOT A_2 MOD A_3 o_cp A_2 AND A_4^ A_3 – FUNK (A_2 + A_2 – A_2 * A_2)+ A_2 o_cp A_2 #

7)# NOT A_2 o_cp A_1 AND A_3 – FUNK (A_1 + A_1 – A_2 * A_1)+ A_1 o_cp A_1 #

8)# NOT A_1 o_cp A_B AND A_2 – FUNK (A_B + A_1 – A_1)+ A_1 o_cp A_B #

9)# NOT A_B o_cp A_B AND A_1 – FUNK (A_B – A_1)+ A_1 o_cp A_B #

10)# NOT ЗНАК AND A_B – FUNK (A_B)+ A_1 o_cp A_B #

11)# Л_3 AND A_B – FUNK (A_B)+ A_1 o_cp A_B #

12)# Л_2 AND A_B – A_4 + A_1 o_cp A_B #

13)# Л_2 AND A_B – A_3 + A_1 o_cp A_B #

14)# Л_2 AND A_B – A_2 + A_1 o_cp A_B #

15)# Л_2 AND A_B – A_1 + A_1 o_cp A_B #

16)# Л_2 AND A_B + A_1 o_cp A_B #

17)# Л_2 AND A_B o_cp A_B #

18)# Л_2 AND ЗНАК #

19) # Л_2 AND Л_3

20) # Л_2 #

21) # Л_1 #

22) # Л_B #

23) #ВЫРАЖЕНИЕ#

Простые фразы:

1) A%, 5, C#, M%, 6, I%, SIN, &HA09B, B#, C%, D#, &B1, >, 0

2) ИД, конст_10, ИД, ИД, конст_10, ИД, конст_16, ИД, ИД, ИД, конст_2, конст_10

3) ИД_К, ИД_К, ИД_К, ИД_К, ИД_К, ИД_К, ИД_К, ИД_К, ИД_К, ИД_К, ИД_К, ИД_К

4) A_4, A_4, A_4, A_4, A_4

5) A_3, A_3, A_4^ A_3, A_3, A_3, A_3, A_3, A_3, A_3

6) A_2 MOD A_3, A_2, A_4^ A_3, A_2, A_2, A_2, A_2, A_2

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5173
Авторов
на СтудИзбе
436
Средний доход
с одного платного файла
Обучение Подробнее