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

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

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

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

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

textual
Листинг программы
#include <stdio.h>
#include <string.h>
 
 
int checkVar (char s[3])
{
    if ((((s[0] <= 90) && (s[0] >= 65)) || ((s[0] >= 97) && ( s[0] <= 122))) && (s[1] == 32))
    { return 1;}
    printf ("Perem napis ne prav");
    return 0;
}
 int checkLeft(char s[3])
 {
    return checkVar(s);
 }
  int checkRight ( char s[255])
  {
    int i, j; char s1[3], s2[3];
    if ((strlen(s) == 5) &&  ((s[2] == '+') || (s[2] == '-') || (s[2] == '*')))
    { 
      for (i = 0; i < 2; i++) 
        {
            s1[i] = s[i]; s2[i] = s[i + 3];
            //s1[3] = '\0'; s2[3] = '\0'; 
        }
      return checkVar(s1)*checkVar(s2); 
    }
    if (strlen(s) == 2) {  for (i = 0; i < 2; i++) 
        {
            s1[i] = s[i]; 
            //s1[3] = '\0';
        } return checkVar(s1); }
  printf ("oshibka zapisi");
  return 0;}
 
    int checkAssign (char s[255]) 
    {
        int i, j; char s1[3]; char s2[255];
        for (i = 0; i < strlen(s); i++)
        
            if ((s[i] ==':') && (s[i + 1] == '=')) 
            {
                for (j=0;j<2;j++) s1[j]=s[j];
                s1[2] = '\0';
                for (j = i + 2; j < strlen(s); j++)
                s2[j -i - 2] = s[j]; s2[j-i-2] = '\0';
            return checkLeft(s1)* checkRight(s2);
            }
            printf ("Nekorrektna zapis");
            return 0;
        }
   int checkLinear(char s[255])
    {
     
      int i, j; char s1[255]; char s2[255]; 
      for (i = 0; i < strlen(s); i++)
      if (s[i] == ';')
      {
        for (j = 0; j < i; j++) 
        s1[j] = s[j]; s1[j] = '\0'; 
        for (j = i + 2; j < strlen(s); j++) 
        s2[j-i-2] = s[j]; s2[strlen(s)-i-2] = '\0'; 
        return checkAssign(s1)*checkLinear(s2);
      }
      return checkAssign(s);
    }
    int main ()
    {
        char s[255] = "X :=A ; Y :=X +A ; I :=X -X ; Z :=Z *G ";
        
        if (checkLinear(s)==1) printf("Lineinaya!"); else printf("Net");
        return 0;
    }

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


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

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

6   голосов , оценка 3.667 из 5
Похожие ответы