Раздел «Язык Си».SimpleGramma:

Простая грамматика

Грамматики (подмножества множества слов в некотором алфавите ) можно описывать с помощью правил

  s -> 0
  s -> 1 s
  s -> 2 s s
  s -> 3 s s s 

Правило s -> 3 s s s , к примеру, означает, что если A, B и C являются корректными словами (принадлежат грамматике), то и слово "3 A B C" тоже является корректным (пробелы не считаются).

Примеры корректных слов: 0, 10, 110, 200, 2100, 2010.

Примеры не корректных слов: 01, 00, 300.

Приведённая ниже программа на С определяет корректность введённого слова.

#include <stdio.h>
#include <limits.h>

int
Read()
{
   int head,i;
    scanf("%d", &head);
    if(head < 0 || head > 3)
       return 1;
    for(i = 0; i < head ; i++)
    {
       if(Read())
           return 1;
    }
    return 0;
}
int
main()
{
  if(!Read())
  {  
    int tmp;
     if(!scanf("%d",&tmp))
        printf("in");
     printf("correct\n");
  }
  else
     printf("incorrect\n");
  return 0;   
}

-- ArtemVoroztsov - 09 Sep 2005