Построить синтаксический анализатор для определяемого в словаре понятия линейная программа - C (СИ)

Узнай цену своей работы

Формулировка задачи:

1.Определить, пуст ли язык L(G) для заданной грамматики G. 2.Построить синтаксический анализатор для определяемого в словаре понятия линейная -программа. И напишите мне доп. задачи, пожалуйста. *1. С помощью грамматики можно вывести некоторое (возможно бесконечное) множество слов, это множество называется языком. Пустым языком будет являться язык, грамматика которого не выводит никаких слов. *2. В учебнике Касьянова дается определение простой программы, вот электронная версия http://pco.iis.nsk.su/ICP/Practice/dd8-1/node4.html Помогите пожалуйста((( мне нужен зачёт...а я не знаю как делать( я не программист и мне это не дается

Решение задачи: «Построить синтаксический анализатор для определяемого в словаре понятия линейная программа»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4.  
  5. int checkVar (char s[3])
  6. {
  7.     if ((((s[0] <= 90) && (s[0] >= 65)) || ((s[0] >= 97) && ( s[0] <= 122))) && (s[1] == 32))
  8.     { return 1;}
  9.     printf ("Perem napis ne prav");
  10.     return 0;
  11. }
  12.  int checkLeft(char s[3])
  13.  {
  14.     return checkVar(s);
  15.  }
  16.   int checkRight ( char s[255])
  17.   {
  18.     int i, j; char s1[3], s2[3];
  19.     if ((strlen(s) == 5) &&  ((s[2] == '+') || (s[2] == '-') || (s[2] == '*')))
  20.     {
  21.       for (i = 0; i < 2; i++)
  22.         {
  23.             s1[i] = s[i]; s2[i] = s[i + 3];
  24.             //s1[3] = '\0'; s2[3] = '\0';
  25.         }
  26.       return checkVar(s1)*checkVar(s2);
  27.     }
  28.     if (strlen(s) == 2) {  for (i = 0; i < 2; i++)
  29.         {
  30.             s1[i] = s[i];
  31.             //s1[3] = '\0';
  32.         } return checkVar(s1); }
  33.   printf ("oshibka zapisi");
  34.   return 0;}
  35.  
  36.     int checkAssign (char s[255])
  37.     {
  38.         int i, j; char s1[3]; char s2[255];
  39.         for (i = 0; i < strlen(s); i++)
  40.        
  41.             if ((s[i] ==':') && (s[i + 1] == '='))
  42.             {
  43.                 for (j=0;j<2;j++) s1[j]=s[j];
  44.                 s1[2] = '\0';
  45.                 for (j = i + 2; j < strlen(s); j++)
  46.                 s2[j -i - 2] = s[j]; s2[j-i-2] = '\0';
  47.             return checkLeft(s1)* checkRight(s2);
  48.             }
  49.             printf ("Nekorrektna zapis");
  50.             return 0;
  51.         }
  52.    int checkLinear(char s[255])
  53.     {
  54.      
  55.       int i, j; char s1[255]; char s2[255];
  56.       for (i = 0; i < strlen(s); i++)
  57.       if (s[i] == ';')
  58.       {
  59.         for (j = 0; j < i; j++)
  60.         s1[j] = s[j]; s1[j] = '\0';
  61.         for (j = i + 2; j < strlen(s); j++)
  62.         s2[j-i-2] = s[j]; s2[strlen(s)-i-2] = '\0';
  63.         return checkAssign(s1)*checkLinear(s2);
  64.       }
  65.       return checkAssign(s);
  66.     }
  67.     int main ()
  68.     {
  69.         char s[255] = "X :=A ; Y :=X +A ; I :=X -X ; Z :=Z *G ";
  70.        
  71.         if (checkLinear(s)==1) printf("Lineinaya!"); else printf("Net");
  72.         return 0;
  73.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы