Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите пожалуйста решыть.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
jurkiw
Помогите пожалуйста решыть.
Программа. Вo входном файле задан текст, за которым следует точка. Проверить, удовлетворяет ли его структура следующему определению:
<текст>::=<элемент> │ <элемент> <текст>
<элемент>::—а | b | (<текст> )| [<текст>] | {<текст>}

Зарание спасибо)))
Lapp
Собственно, нужно только, грубо говоря, перевести определение на Паскаль. Никаких других умственных затрат, почти слово в слово. Хотя нет, вру.. Пришлось добавить к определению, что пустая строка - это тоже текст. Думаю, без этого не обойтись.

const
Letters: set of char= ['a','b'];

function IsText(s:string):boolean; forward;

function IsElement(s:string):boolean;
begin
IsElement:= (Length(s)=1) and (s[1] in Letters) or (
(s[1]='(') and (s[Length(s)]=')') or
(s[1]='[') and (s[Length(s)]=']') or
(s[1]='{') and (s[Length(s)]='}')
) and IsText(Copy(s,2,Length(s)-2))
end;

function IsText(s:string):boolean;
var
i:integer;
begin
i:= 0;
repeat
Inc(i)
until (i>Length(s)) or IsElement(Copy(s,1,i)) and IsText(Copy(s,i+1,Length(s)));
IsText:= (s='') or (i<=Length(s))
end;

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.