это быстро и бесплатно
Оформите заказ сейчас и получите скидку 100 руб.!
Ознакомительный фрагмент работы:
Реферат на тему:
Аналіз та обчислення дужкових виразів
У розділі 9 розглядалися дужкові арифметичні вирази, мова яких породжується розширеною LA(1)-граматикою G2:
( { 0, … , 9, ., c, i, n, o, s, +, *, -, /, (, ) },
{ E, T, F, A, C, D, N },
{ E ® T { +T | -T }, T ® F { *F | /F }, F ® (E) | C | A,
C ® N (E), N ® 'sin' | 'cos',
A ® D { D } [ . { D } ], D ® 0 | … | 9 },
E ).
Імена A, C, N є скороченнями фраз "Arithmetic constant", "Call of function", "Name of function" відповідно, тобто "Арифметична стала", "Виклик функції", "Ім'я функції".
Побудуємо програму Aexval аналізу та обчислення арифметичних виразів на основі програми Aexan із попереднього підрозділу. Нехай вираз подається в кількох рядках, і ознакою кінця є порожній рядок. Читання лексем виразу задається модулями Glx та Inbuf, означеними в розділі 20. Замість функції getc добування наступного символу з програми Aexan використовується функція getlx добування наступної лексеми, а замість поточного символу ch – поточна лексема lx типу Tlx. Ознака наявності лексеми, що повертається з функції getlx, присвоюється бульовій змінній islx.
Підпрограми для нетерміналів A, N тут не створюються, оскільки аналіз лексем, позначених ними, уже задаєно в модулі Glx. Кожна з процедур E, T, F перетворюється на функцію обчислення тієї частини виразу, яка аналізується при виконанні її виклику. Побудуємо їх таким чином, щоб за помилкового виразу з них поверталося значення 1.
Згідно з продукціями граматики G2, функція F обчислення множника у виразі має такий вигляд:
function F : real;
begin
if ( lx.lxt = par ) and ( lx.prt = '(' ) then
begin
islx := getlx ( lx ); F := E;
if islx and ( lx.lxt = par ) and ( lx.prt = ')' )
then islx := getlx ( lx )
else begin error; F := 1 end
end
else
if lx.lxt = con then
begin F := lx.numb; islx := getlx ( lx ) end
else
if lx.lxt = nam then F := C
else begin error; F := 1 end
end
Функція C задає обчислення значення, що має повернутися з указаного у виразі виклику функції sin чи cos:
function C : real;
var lx1 : Tlx; v : real;
begin
lx1 := lx; islx := getlx ( lx );
if islx and ( lx.lxt = par ) and ( lx.prt = '(' ) then
begin
islx := getlx ( lx ); v := E;
if islx and ( lx.lxt = par ) and ( lx.prt = ')' )
then islx := getlx ( lx )
else begin error; C := 1 end;
if ok then
if lx1.name = 'sin' then C := sin ( v )
else C := cos ( v )
else begin error; C := 1 end
end
else begin error; C := 1 end
end
Функція E задає обчислення виразу, вивідного з E:
function E : real;
var lx1 : Tlx; v : real;
begin
v := T;
while ok and ( lx.lxt = ops )
and ( lx.sig in ['+', '-'] ) do
begin
lx1 := lx; islx := getlx ( lx );
case lx1.sig of
'+' : v := v + T;
'-' : v := v - T
end
end;
if ok then E := v else E := 1
end
Функцію T обчислення доданка у виразі, яка має аналогічну функції E структуру, залишаємо для самостійної розробки. Головна програма подібна до програми Aexan:
program Aexval ( input, output );
uses Inbuf, Glx
var islx, ok : boolean;
v : real; lx : Tlx;
procedure error;
begin ok := false; islx := false end;
function E : real; forward;
function C : real; … end;
function F : real; … end;
function T : real; … end;
function E; { скорочений заголовок } … end;
begin
ok := true;
v := 0;
islx := getlx ( lx );
v := E;
if ok and not islx then writeln ( v )
else writeln ( '***error***' )
end.
Сделайте индивидуальный заказ на нашем сервисе. Там эксперты помогают с учебой без посредников
Разместите задание – сайт бесплатно отправит его исполнителя, и они предложат цены.
Цены ниже, чем в агентствах и у конкурентов
Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит
Бесплатные доработки и консультации
Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки
Гарантируем возврат
Если работа вас не устроит – мы вернем 100% суммы заказа
Техподдержка 7 дней в неделю
Наши менеджеры всегда на связи и оперативно решат любую проблему
Строгий отбор экспертов
К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»
Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован
Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн
Выполнить 2 контрольные работы по Информационные технологии и сети в нефтегазовой отрасли. М-07765
Контрольная, Информационные технологии
Срок сдачи к 12 дек.
Архитектура и организация конфигурации памяти вычислительной системы
Лабораторная, Архитектура средств вычислительной техники
Срок сдачи к 12 дек.
Организации профилактики травматизма в спортивных секциях в общеобразовательной школе
Курсовая, профилактики травматизма, медицина
Срок сдачи к 5 дек.
краткая характеристика сбербанка анализ тарифов РКО
Отчет по практике, дистанционное банковское обслуживание
Срок сдачи к 5 дек.
Исследование методов получения случайных чисел с заданным законом распределения
Лабораторная, Моделирование, математика
Срок сдачи к 10 дек.
Проектирование заготовок, получаемых литьем в песчано-глинистые формы
Лабораторная, основы технологии машиностроения
Срок сдачи к 14 дек.
Вам необходимо выбрать модель медиастратегии
Другое, Медиапланирование, реклама, маркетинг
Срок сдачи к 7 дек.
Ответить на задания
Решение задач, Цифровизация процессов управления, информатика, программирование
Срок сдачи к 20 дек.
Написать реферат по Информационные технологии и сети в нефтегазовой отрасли. М-07764
Реферат, Информационные технологии
Срок сдачи к 11 дек.
Написать реферат по Информационные технологии и сети в нефтегазовой отрасли. М-07764
Реферат, Геология
Срок сдачи к 11 дек.
Разработка веб-информационной системы для автоматизации складских операций компании Hoff
Диплом, Логистические системы, логистика, информатика, программирование, теория автоматического управления
Срок сдачи к 1 мар.
Нужно решить задание по информатике и математическому анализу (скрин...
Решение задач, Информатика
Срок сдачи к 5 дек.
Заполните форму и узнайте цену на индивидуальную работу!