Язык Си в примерах/Простая грамматика: различия между версиями

Содержимое удалено Содержимое добавлено
Нет описания правки
м {{BookCat}}; избыточные <big /> и <font /> вокруг <source />; ссылки; пробелы.
Строка 26:
S -> '3' S S S
 
Правило <tt>S -> '3' S S S</tt> , к примеру, означает, что если ''a'', ''b'' и ''c'' являются корректными словами (словами, выводимыми из символа <tt>S</tt>), то и слово <tt>3</tt>''abc'' тоже является корректным.
 
* Примеры корректных слов: 0, 10, 110, 200, 2100, 2010, 1111111110.
Строка 33:
Приведённая ниже программа на Си определяет корректность введённого слова.
 
<big><source lang="c">
#include <stdio.h>
#include <limits.h>
Строка 63:
return 0;
}
</source></big>
 
Здесь представлен классический рекурсивный способ лексографического разбора.
 
Программный код можно максимально приблизить к самим правилам:
<big><source lang="c">
ReadS() {
if( scanf("%d", &n) != 1 ) return 0;
Строка 79:
}
}
</source></big>
 
== Задание ==
:'''Задача 1.''' Напишите программу, определяющую корректность слова, не используя идеи рекурсии и стека. Для этого обявите переменную <tt>n</tt>, равную количеству объектов <tt>S</tt>, которые осталось считать. Изначально <tt>n = 1</tt>.
:'''Задача 2.''' Напишите программу, которая определяет, является ли введённое слово выводимым из символа S.
S -> A | B
A -> '(' B* ')'
Строка 106:
Код примерно должен быть таким:
 
<big><source lang="c">
ReadChar(char x) {
int c;
Строка 133:
printf ("Correct\n");
}
</source></big>
 
Разбор языков (parsing), которые задаются простыми рекурсивными грамматиками,
реализуют с помощью рекурсивных функций, которые возвращают
1 (успешно считано) или 0 (не считано).
 
 
Строка 148:
 
:'''Задача 6.''' Изучите задачу вычисления сопротивления по описанию параллельно-последовательной электрической схемы из сопротивлений &mdash; [[Язык Си в примерах/Задача «Расчёт сопротивления схемы»]]
 
[[Категория:Язык Си в примерах|Простая грамматика]]
{{BookCat}}