
- •Задание на курсовую работу: «синтаксически управляемый анализ семантики идентификаторов в текстах программ»
- •Некоторые теоретические сведения о семантическом анализе с использованием грамматики свойств
- •Пример формального описания синтаксиса и семантики языка Неформальное описание языка
- •Список семантических ошибок, подлежащих обнаружению
- •Описание грамматики свойств
- •Тестовый пример
- •Комментарии к тестовому примеру
- •Некоторые практические рекомендации Общие рекомендации
- •Рекомендации по использованию Flex-Bison в курсовом проектировании
- •Содержание пояснительной записки
- •Библиографический список
- •Приложение 1 Синтаксический анализ с использованием детерминированного автомата с магазинной памятью
- •Lr(1)-реализация алгоритма «сдвиг-приведение»
- •Восходящий разбор с использованием грамматики простого предшествования
- •Приложение 2 Примеры тестов для вариантов задания на курсовую работу
- •Приложение 3 График выполнения курсовой работы
- •Содержание
Приложение 2 Примеры тестов для вариантов задания на курсовую работу
Исходный язык – подмножество Pascal
Вход:
program p;
procedure f1(a:boolean);
var z:character;
begin
z:=’a’;
if a then z:=z+1
else z:=z-1;
end;
begin
f1(false);
end.
Выход:
Семантическая ошибка: z– использование идентификатора не в соответствии с типом
Исходный язык – подмножество C
Вход:
int i,j;
void f1(char i)
{ if(i) f1(i--);
else return;
}
void main()
{ bool a=false;
f1(true); i=1;
f1(10);
f1("1.3");
}
Выход:
Семантическая ошибка: f1– использование идентификатора не в соответствии с типом
Исходный язык – подмножество Java
Вход:
class Point { int x, у;
public static void main(String args[]) {
Point p = new Point();
р.х = 10;
p.у = 20;
p.z = 30;
System.out.println("x = " + р.x + " у = " + p.y + " z = " + p. z);
} }
Выход:
Семантическая ошибка: р.z– использование необъявленного идентификатора
Исходный язык – подмножество Flex
Вход:
letter [a-z]
digit [0-9]
identifier {letter}({letter}|{digit})*
%%
{identifier} {cout<<”идентификатор”<<yytext; return ID_token;}
{semicolon} {cout<<”точка с запятой”<<yytext; return S_token;}
%%
Выход:
Семантическая ошибка: semicolon– использование необъявленного идентификатора
Исходный язык – подмножество Perl
Вход:
my $var=’a’;
print “$var=’$var’\n”;
sub1();
sub sub1{
$var=’b’;
my $lvar=’c’;
print “$lvar=’$lvar’\n”;
sub2();
print “$var=’$var’\n”;
}
sub sub2{
print “$var=’$var’\n”;
$var=’d’;
print “$lvar=’$lvar’\n”;
}
Выход:
Семантическая ошибка: $lvar– использование необъявленного идентификатора
Исходный язык – подмножество Lisp
Вход:
(defun list1(x y)
(cons x (cons y nil)))
(setq list1 ‘a)
(list1 list1 ‘b)
(list1 a list1)
Выход:
Семантическая ошибка: a– использование необъявленного идентификатора
Исходный язык – подмножество Prolog
Вход:
domains
int=integer*
predicates
ord(int)
clauses
ord([A]).
ord([A,B|C]):-A>C,ord([B|C]).
Выход:
Семантическая ошибка: C – использование идентификатора не в соответствии с типом
Исходный язык – подмножество Matlab
Вход:
function[]=main()
r=5; x0=3; y0=-3;
circle(r,x0,y0);
circle(r)
function[]=circle(r,x0,y0)
if(nargin<3), y0=0;end
if(nargin<2), x0=0;end
t=0:pi/64:2*pi;
x=x0+r*cos(t);
y=y+r*sin(t);
plot(x,y), axis equal, grid on, hold on
xlabel(‘x’), ylabel(‘y’), title(‘circle’)
Выход:
Семантическая ошибка: y – использование необъявленного идентификатора
Исходный язык – подмножество VisualBasic
Вход:
Dim Result As Date
Sub MultiplyEm(Value1 As Single, Value2 As Single)
Result =Value1*Value2
End Sub
Sub TestProc()
Dim V1 As Single, V2 As Single
V1=5
V2=7
MultiplyEm (V1, V2)
End Sub
Выход:
Семантическая ошибка:Result – использование идентификатора не в соответствии с описанием
Исходный язык – подмножество Shell
Вход:
for i in *
do
echo $j
done
Выход:
Семантическая ошибка: j– использование необъявленного идентификатора
Приложение 3 График выполнения курсовой работы
№ этапа |
Содержание этапа |
№ недели отчетности |
Рейтинг |
1 |
Выполнение лабораторной работы «Средства автоматизации построения синтаксических анализаторов» |
2 |
5
|
2 |
Ознакомление с исходным языком, подготовка тестовых примеров |
4 |
10 |
3 |
Подготовка формального описания синтаксиса исходного языка |
6 |
10 |
4 |
Разработка грамматики свойств |
7 |
10 |
5 |
Разработка программной реализации |
11 |
15 |
6 |
Тестирование программы |
13 |
5 |
7 |
Подготовка пояснительной записки |
14 |
5 |
8 |
Защита курсовой работы |
16 |
40 |