Синтаксические диаграммы автоматных языков и реализация распознавателей на их основе — различия между версиями
Материал из Вики ИТ мехмата ЮФУ
Admin (обсуждение | вклад) (→Задания к теме 2 «Синтаксические диаграммы автоматных языков и реализация распознавателей на их основе») |
Admin (обсуждение | вклад) (→Программа 2 распознавания целого со знаком по синтаксической диаграмме) |
||
Строка 6: | Строка 6: | ||
=====Программа 2 распознавания целого со знаком по синтаксической диаграмме===== | =====Программа 2 распознавания целого со знаком по синтаксической диаграмме===== | ||
− | <source lang="Delphi">// | + | <source lang="Delphi">// Разбор целого со знаком с помощью синтаксических диаграмм |
+ | var | ||
+ | ch: Char; | ||
+ | pos: integer; | ||
+ | |||
procedure error(); | procedure error(); | ||
begin | begin | ||
− | writeln(' | + | writeln('^':pos); |
+ | writeln('Ошибка в символе ',ch); | ||
halt; | halt; | ||
end; | end; | ||
− | + | ||
− | + | procedure NextCh; | |
− | + | begin | |
+ | read(ch); | ||
+ | pos += 1; | ||
+ | end; | ||
+ | |||
begin | begin | ||
var s: string := ''; | var s: string := ''; | ||
− | + | ||
− | + | NextCh; | |
if ch in ['+','-'] then | if ch in ['+','-'] then | ||
− | + | NextCh; | |
− | + | ||
if ch in ['0'..'9'] then | if ch in ['0'..'9'] then | ||
− | + | NextCh | |
else error; | else error; | ||
− | + | ||
while ch in ['0'..'9'] do | while ch in ['0'..'9'] do | ||
− | + | NextCh; | |
− | + | ||
if ch<>#13 then | if ch<>#13 then | ||
error; | error; | ||
− | + | ||
writeln('Распознано целое число'); | writeln('Распознано целое число'); | ||
end.</source> | end.</source> |
Версия 20:19, 9 февраля 2012
Содержание
Тема 2. Синтаксические диаграммы автоматных языков и реализация распознавателей на их основе
Синтаксическая диаграмма для целого со знаком
Программа 2 распознавания целого со знаком по синтаксической диаграмме
// Разбор целого со знаком с помощью синтаксических диаграмм
var
ch: Char;
pos: integer;
procedure error();
begin
writeln('^':pos);
writeln('Ошибка в символе ',ch);
halt;
end;
procedure NextCh;
begin
read(ch);
pos += 1;
end;
begin
var s: string := '';
NextCh;
if ch in ['+','-'] then
NextCh;
if ch in ['0'..'9'] then
NextCh
else error;
while ch in ['0'..'9'] do
NextCh;
if ch<>#13 then
error;
writeln('Распознано целое число');
end.
Задания к теме 2 «Синтаксические диаграммы автоматных языков и реализация распознавателей на их основе»
- Реализовать программу 2
- Реализовать в программе 2 семантические действия по накоплению в строке распознанного целого числа и преобразованию его в целое в конце разбора (при встрече завершающего символа)
- Составить синтаксическую диаграмму идентификатора. Реализовать по ней распознаватель.