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