Построить синтаксический анализатор для определяемого в словаре понятия линейная программа - 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;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д