Построить синтаксический анализатор для определяемого в словаре понятия линейная программа - 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;
}