Синтаксические диаграммы автоматных языков и реализация распознавателей на их основе — различия между версиями

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

  1. Реализовать программу 2
  2. Реализовать в программе 2 семантические действия по накоплению в строке распознанного целого числа и преобразованию его в целое в конце разбора (при встрече завершающего символа)
  3. Составить синтаксическую диаграмму идентификатора. Реализовать по ней распознаватель.