ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 07.11.2023
Просмотров: 79
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
При проектировании вопросно-ответных систем необходимо:
-
четко определить логическую структуру диалога; -
исключить возможность повторяющихся вопросов; -
четко сформулировать вопросы, так, чтобы они допускали только однозначные ответы; -
исключить лишние вопросы, не имеющие отношения к теме диалога; -
продумать логичное размещение вопросов на экране; -
продумать возможность вывода и даже редактирования протокола диалога.
4. Диалог типа «заполнение бланка»
Такой диалог предполагает, что на экране появляется так называемый «бланк». Пользователь вводит сообщений в поля бланка.
При проектировании такого типа диалога необходимо:
-
Выбрать способ перемещения курсора по полям бланка:
– автоматическое перемещение (после окончания ввода поля курсор перемещается в другое поле по заранее заданному маршруту);
– произвольное перемещение (пользователь сам задает маршрут перемещения курсора).
2) продумать расположение полей на экране, в том числе и их логический порядок;
3) оценить количество информации и предусмотреть, если необходимо переход от одного окна к другому.
5. Диалог типа "прямой режим"
Такой тип диалога предполагает наличие языка команд. Для его организации пользователь вводит некоторую команду с необходимыми параметрами и ключами.
При проектировании диалога типа «прямой режим» необходимо:
-
продумать грамматику языка команд; -
предусмотреть, если возможно, использование символов одного регистра в одной команде; -
предусмотреть возможность сокращения названия команд и их параметров; -
предусмотреть однотипность названия команд, чтобы не возникало сложностей при переходе от одной команды к другой.
6. Средства помощи и поддержки
Любая интерактивная система должна предоставлять пользователю возможность получить помощь, а при необходимости, и поддержку. Поэтому разработчик вычислительной системы должен заранее предусмотреть способы их организации:
-
при вводе информации в диалоге необходимо предусмотреть проверку достоверности вводимых данных. -
выводить сообщения о допущенных в процессе диалога ошибках. -
при необходимости предусмотреть возможность вызова помощи. Для этого можно:
– нажать функциональную клавишу (например, F1);
– ввести определенные символы (например, HELP);
– использовать специальное поле для ввода символа помощи.
4) Предусмотреть поддержку:
– неодушевленную (документы, справочники, специальную литературу);
– одушевленную (специалист, который сопровождает систему).
Контрольные вопросы
-
Каковы факторы успешного внедрения интерактивных систем? -
Кто является непрофессиональным пользователем? -
Какие типы диалога существуют? -
Какие типы диалога лучше подходят для непрофессиональных пользователей? -
Какие типы диалога лучше подходят для профессиональных пользователей? -
Для чего нужны средства помощи в интерактивных системах? -
Для чего нужны средства поддержки в интерактивных системах?
Упражнения
-
Записать грамматику и построить синтаксическое дерево для заданного предложения. -
Привести алгоритм лексического анализа для заданного предложения. -
Привести алгоритм синтаксического анализа методом рекурсивного спуска для заданного предложения. -
Представить матрицу отношений предшествования для заданного предложения. -
Привести алгоритм синтаксического анализа методом операторного предшествования для заданного предложения.-
1. ACCEPT *; A if (A.LE.0) S=S+A S=A*100-K | 2. МАХ=0 if (X.GT.MAX) MAX=X TYPE *, MAX |
3. D=B*B=-4*A*C if (D.EQ.O) T=-B/(2*A) TYPE*, T | 4.S1:=A MOD B; S2:=A-((A DIV B)*B); if S1=S2 then write ('ВСЁ') |
5. if x>0 then y:=l else if x<0 then y:=2 else y:=0 | 6. if Y>MIN & Y PUT LIST (Y); else X=X+1; |
7. Z=Z+1; if Z>N then DO; Z=Z/N; PUT DATA (Z); end; | 8. X=X0+(i-l)*H if (X.LT.O) Y=X*X if (X.GT.O) Y=2*X |
9. if i MOD 2=0 THEN Z:=Z*X; i:=i DIY 2; X:=X*X*X | 10. READ(B); if B>L THEN begin A:=A-Z; A:=A+B end else B:=L+B |
11. if (X+Y)<>0 THEN A:=(X*X+Z*Z)/(1 +1/(X-Y*Z)) else A:=0; writeln (A) | 12. A:=-3*C; B:=Y*Y*X; if (A<0) AND (B>0) THEN C:=-A+B else C:=A+B |
13. if T>EPS THEN begin K:=K+2; T:=-T*SX/(K*(K-1)); S:=S+T end | 14. if N>0 THEN M:=-M+l/N; B:=M*N+3; if B=0 THEN write (N) |
15. if (2.5+0.68<=2.8) OR Y AND X OR Z AND NOT Y THEN writeln ('верно') | 16. READ(N); M:=0; If f=1 THEN writeln (M) Else M:=M+1/N |
17. RESET (F,’F.DAT’); SUM:=SUM+F^; GET (F) | 18. REWRITE (F, 'F.DAT'); F^:=K*K; PUT (F) |
19. READ (x, y); A:=x/(y*y*x*x/(y+x/3)) | 20. READ (H, В, М); PI:=3.14; V:=PI*H*(B*B+M*M+B*M)/3 |
21.A=Z*Z; B=l+A/(3*Z+A/5); if B>5 THEN writeln (B) | 22. if x<0.5 THEN y=2*x*x-x else y=x*x/(x-0.1); write (y) |
23. READ (A, B); IF A>B THEN X=2*A+2/B+4; IF A<=B THEN x=(A+B)*(A-B); writeln (x) | 24. READ (I); if (I>4) OR (I<0) THEN writeln ('ошибка') |
25. if A<0 THEN A=-A; if B<0 THEN B=-B; SA:=(A+B)/2; SB:=A*B/2 | 26. READLN (Y); if Y<0 THEN Z:=Y-3*Y*Y/(Y+1) else if Y=0 THEN Z:=0 else Z:=100*Y |
КУРСОВАЯ РАБОТА
по дисциплине "ЛИНГВИСТИЧЕСКИЕ СРЕДСТВА ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ"
Основная цель - закрепление навыков создания лингвистического обеспечения, Описание языка с помощью формальной грамматики, разработка алгоритма и реализация простых вариантов трансляторов, изучение различных методов синтаксического анализа.
Общие требования к оформлению курсовых работ по дисциплине "Лингвистичвские средства вычислительных систем" для бакалавров 2 курса специальности 230100
В отчете по курсовой работе необходимо отразить следующие разделы:
1. Пояснительная записка, включающая:
1.1 Задание на проектирование (в том числе дата принятия задания к исполнению, подпись студента).
1.2 Содержание (название разделов, подразделов с указанием страниц; титульный лист не нумеруется, но считается).
1.3 Введение (отразить общее назначение программы, указать, дату разработки, кем разработана программа, ее название).
1.4 Описание процесса решения задачи.
1.5 Блок-схема основной программы и процедур.
2. Распечатка программных модулей.
3. Описание программы, включающее:
3.1 Назначение и общее описание программы.
3.2 0писание логической структуры программы.
3.3 Способ обращения к программе (дать краткую характеристику операционной среды, как обратиться к программе, как получить загрузочный модуль, как запустить программу на выполнение).
3.4 Перечень технических средств.
4. Описание входных и выходных данных.
5. Текстовые примеры работы программы (контрольные примеры при верных исходных данных и ошибочных).
Методические указания
Взаимодействие между компонентами компилятора может осуществляться разными способами. На рис. 22а показано, что лексический анализатор (ЛА) считывает исходную программу (ИП) и представляет ее в виде файла лексем. Синтаксический анализатор (СА) читает этот файл и выдает внутреннее представление программы (ВП) программы. Наконец, этот файл считывается генератором кода (ГК), который создает объектный код программы. Компилятор такого вида называется трехпроходным, так программа считывается трижды (исходная программа, лексемы, внутреннее представление).
На рис. 22б изображена структура однопроходного компилятора. В этом случае синтаксический анализатор выступает в роли управляющей программы, вызывая лексический анализатор и генератор кода, организованные в виде процедур. Синтаксический анализатор постоянно обращается к лексическому анализатору, получая от него лексему за лексемой из просматриваемой программы до тех пор, пока не построит новый элемент внутреннего представления, после чего обращается к генератору кода, который создает объектный код для этого фрагмента программы.
Каждый из этих способов организации компиляторов имеет свои преимущества. В трехпроходном компиляторе достигается высокая гибкость за счет независимости каждой фазы трансляции. С другой стороны, если требуется достичь высокой скорости транслирования, используют однопроходный компилятор, в котором исходная программа считывается один раз.
Промежуточное положение между описанными двумя вариантами занимает двухпроходный компилятор (рис.22в). В этом случае синтаксический анализатор, вызывая лексический анализатор, получает лексемы и строит файл во внутреннем представлении. Генератор кода считывает этот файл и создает объектный код.
Рисунок 22
Способы организации трансляторов
ВАРИАНТЫ ЗАДАНИЙ:
1. Разработать однопроходный транслятор с исходного языка на язык Паскаль:
программа В;
переменные с, а ,k: вещественные;
i: целые;
s=0;
i=1;
ввод а;
начало цикла
s=s+1/i;
i=i+1;
если s>a то закончить цикл;
вывод i,s
конец.
2. Разработать двухпроходный транслятор с исходного языка на язык Паскаль:
программа Z;
переменные а,b,c: вещественные;
начало
ввод а,b,с;
если а>b и b>с то выполнить
(a=2*a;b=2*b;c=2*c)
иначе выполнить ( a=|a|; b=|b|; c=|c| );
вывод a,b,c;
конец.
3. Разработать трехпроходный транслятор с исходного языка на язык Паскаль:
программа. W;
переменные х: вещественные;
i: целые;
ввод i,x; , •
если i равен
[ 0 то x=0,
1 то х=sin(х),
2 то x=cos(x),
3 то х=х*x]
х=х/2;
вывод х;
конец.
4. Разработать однопроходный транслятор с; исходного языка на язык ассемблера:
программа С;
переменные х,у,z:целые;
ввод х,у:
если x>у то z=x-y
иначе z=y-x+l;
вывод z;
конец.
5. Разработать двухпроходный транслятор с исходного языка на язык ассемблера:
программа М;
переменные i,j: целые;
ввод i,j;
если i>j то вывод I иначе (i=i+j, вывод i);
конец.
6. Разработать трехпроходный транслятор с исходного языка на язык ассемблера:
program К;
label 1;
vаг f, i, n: integer;
begin
read(n);
f:=1; i:=1;
1: f:=f*i;
i:=i+1;
if i<=n then goto 1;
writeln(f)
end.
7. Разработать однопроходный транслятор с исходного языка на язык Бейсик:
программа К;
переменные n, i, f: целые;
f=l;
ввод (n);
цикл i=1,n выполнить f=f*i;
вывод (f)
конец.
8. Разработать двухпроходный транслятор с исходного языка на язык Бейсик:
real p,x
integer i,n
accept *,x,n
р=1
do 15 I=1,n
p=p*(1-x/i)**2
15 continue
stop
end
9. Разработать трехпроходный транслятор с исходного языка на язык Бейсик:
real x,y
accept *,x,n
if (x.LT.0) y=x**2
if (х.GЕ.0) у=х**З
type *,у
stop
end
10. Разработать трехпроходный транслятор с исходного языка на язык Фортран:
программа Р;
переменные s: вещественные;
i, n: целые;
s=1;
ввод n;
цикл 1 oт 1 до n с шагом 2
выполнить s=s*i/(i+1);
вывод s;
конец.
11. Разработать двухпроходный транслятор с исходного языка на язык Паскаль:
программа Е;
переменные h: вещественные;
n: целые;
h:=0;
читать(n);
пока n > 0 выполнить
(h:=h+l/n; n:=n-l);
печатать (h)
конец.
12. Разработать однопроходный транслятор с исходного языка на язык ПЛ-1:
integer m,n
do 10 n=11,49,2
m=n**2
type *,n,m
10 continue
stop
end
13. Разработать однопроходный транслятор с исходного языка на язык Фортран:
program К16;
var i,n: integer;
р,а:.геа1;
begin
read(n);
p:=1;
for i:=l to n do p:=p*(a+i-1);
write(p)
end.
14. Разработать двухпроходный транслятор с исходного языка на язык ПЛ-1:
программа PC;
переменные х, у: вещественные;
ввод (х,у);
если х>у то [ y=(x+y)/2;x=x*y/2]
иначе [ х=(x+у)/2; у=x*у/2 ];
вывод (х, у)
конец.
15. Разработать однопроходный транслятор с исходного языка на язык Паскаль:
real х,s
integer k,i,n
accept *,x,n
s=0
do 10 i=1,n
k=2*i+1
s=s+cos(k*x)/k
-
continue
type *,s
stop
end
16. Разработать трехпроходный транслятор с исходного языка на язык Си:
процедура X;
переменные s1,s2,а, b: вещественные;
i,j:целые:
s1:=0;
s2:=0;
ввод (a,b);
цикл i от 0 до 10 шаг 2 выполнить
[
s1:=s2+a;
s2:=0;
цикл j от 1 до 20 шаг l выполнить
s2:=s2+b;
]
передача (sl)
конец.
17. Разработать двухпроходный транслятор с исходного языка в язык Си:
procedure К;
var i,n,f: integer;
begin
read(n);
f:=1;
i:=1;
while i<=n do
begin
f:=f*i;
i:=i+1
end;
write(f)
end.
18. Разработать трехпроходный транслятор с исходного языка на язык Паскаль:
main( )
{ int i;
double h,b,a,m,n,d,x;
scanf (“%le%le",&a,&b);
h=(b-a)/10;
for(I=0; i<=10;i++)
{ x=a+h*i;
m=(2*h*h-4)/(2*h);
n=(2-h)/(2+h);
d=m*h*h-m*n;
printf (“\n%le,%le”,x,d);
}
}
19. Разработать однопроходный транслятор с исходного языка на язык Бейсик:
программа Z;
переменные у,k: вещественные;
i,n: целые;
ввод (k);
ввод (n);
цикл i от 1 до n выполнить
k:=k*y;
вывод (k)
конец.
20. Разработать однопроходный транслятор с исходного языка на язык Си:
программа АВ;