Автор: Пользователь скрыл имя, 15 Сентября 2012 в 17:08, лабораторная работа
Создание в среде Pascal программы, которая определяет правильно ли описаны переменные языка Паскаль во входном файле input.txt
1. Задание
1.1 Входные данные
1.2 Выходные данные
2. Краткая теория
3. Результаты работы программы
4. Выводы
Список литературы
Приложение.
err_pos:=err_pos+position;
err_name:='Ожидается "," или ":", а найдено '+'"'+lines[err_line][err_pos]
check:=false;
exit;
end;
end;
COLON :
begin
case UpCase(lines[line][position]) of
'A':
begin
if UpperCase(get_str) = 'ARRAY' then
else
end;
'S':
begin
if UpperCase(get_str) = 'STRING' then
begin
prev_pos:=VAR_TYPE;
aft_str:=true;
check(lines[line]);
exit;
end
else
goto else_p_colon;
end;
'I':
begin
if UpperCase(get_str) = 'INTEGER' then
begin
prev_pos:=VAR_TYPE;
check(lines[line]);
exit;
end
else
goto else_p_colon;
end;
'R':
begin
if UpperCase(get_str) = 'REAL' then
begin
prev_pos:=VAR_TYPE;
check(lines[line]);
exit;
end
else
goto else_p_colon;
end;
else
begin
else_p_colon: err_name:='Ожидается "array" или тип переменной'; //Можно добавить вывод имени, встретившегося вместо переменной
err_line:=line;
err_pos:=err_pos+position-(
check:=false;
exit;
end;
end;
end;
ARRAY_P :
begin
is_array:=true;
if lines[line][position] = '[' then
begin
prev_pos:=BRECKET_1;
startP:='';
position:=position+1;
check(lines[line]);
exit;
end
else
if (UpCase(lines[line][position])
begin
if UpperCase(get_str) = 'OF' then
begin
prev_pos:=COLON;
is_array:=false;
check(lines[line]);
exit;
end
end
else
begin
err_line:=line;
err_pos:=err_pos+position;
err_name:='Ожидается "[", а найдено '+'"'+lines[err_line][err_pos]
check:=false;
exit;
end;
end;
BRECKET_1: // "[" , ".." , ","
begin
if (lines[line][position]>='0') and (lines[line][position]<='9') then
begin
if (not aft_dots) or (aft_str) then //если двух точек не было ИЛИ это не строка
begin
while (lines[line][position]>='0') and (lines[line][position]<='9') do
begin
startP:=startP+lines[line][
position:=position+1;
end;
if aft_str then //Проверка длинны строки не может быть длиннее 255 сиволов
if StrToInt(startP) > 255 then
end
else //если 2 точки были
begin
while (lines[line][position]>='0') and (lines[line][position]<='9') do
begin
endP:=endP+lines[line][
position:=position+1;
end;
if StrToInt(endP) < StrToInt(startP) then //Проверяем границы массива
begin
end
end;
prev_pos:=NUMERIC;
check(lines[line]);
exit;
end
else //Если не цифра
begin
err_line:=line;
err_pos:=err_pos+position;
err_name:='Ожидается цифра, а найдено '+'"'+lines[err_line][err_pos]
check:=false;
exit;
end;
end;
NUMERIC :
begin
case lines[line][position] of
'.' :
begin
end;
',' :
begin
end;
']' :
begin
end;
else
else_p_num: begin