Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2010, 17:55   #1
goldlider
Пользователь
 
Регистрация: 12.04.2010
Сообщений: 10
По умолчанию Синтаксический анализатор оператора case

Добрый вечер. Возникла при решении задачи. Привожу условие и соответсвующий код.

Условие: Оператор варианта case языка Pascal. В кач-ве операторов, среди
которых производиться выбор для исполнения, используйте только операторы присваивания, правой частью которых яв-ся арифметические выражения, составленные из простых переменных и констант целого типа, круглых скобок и знаков арифметических операций: сложения, вычитания, умножения и деления. Приоритет операций обычный.

program ParseCase;
uses crt;
const EOT = #0;
var ch:char;
pos:integer;
zikl:string;
line:integer;

procedure NextCh;
begin
if eoln then
begin
{ch:=#10;}
readln;
line:=line + 1;
pos:=0;
end
else
begin
read(ch);
pos:=pos + 1;
zikl:=zikl + ch;
end;
end;

procedure ResetText;
begin
{clrscr;}
pos:=0;
line:=0;
writeln('Vvedite operator');
zikl:='';
NextCh;
while ch = ' ' do NextCh;
end;

procedure Error(Message:string);
begin
{writeln('^'os);
writeln('Sintaksicheskaia ochibka: ', Message); }
writeln('Sintaksicheskaia ochibka:', Message ,' ', line, ' stroke ', pos,' posicii');
halt;
end;

procedure Number;
begin
while ch in ['0'..'9'] do NextCh;
end;

procedure Name;
begin
while ch in ['A'..'Z', 'a'..'z','_'] do NextCh;
end;

procedure ListConst;
begin
while ch = ' ' do NextCh;
Name;
Number;
if ch = ':' then NextCh else Error('Ojidaetsa :');
end;

procedure OperCase;
begin
if ch in ['C', 'c'] then NextCh else Error('Ojidaetsa C');
if ch in ['A', 'a'] then NextCh else Error('Ojidaetsa A');
if ch in ['S', 's'] then NextCh else Error('Ojidaetsa S');
if ch in ['E', 'e'] then NextCh else Error('Ojidaetsa E');
if ch = ' ' then NextCh else Error('Ojidaetsa probel');
while ch = ' ' do NextCh;
Name;
if ch = ' ' then NextCh else Error('Ojidaetsa probel');
while ch = ' ' do NextCh;
if ch in ['O', 'o'] then NextCh else Error('Ojidaetsa O');
if ch in ['F', 'f'] then NextCh else Error('Ojidaetsa F');
ListConst;

end;

begin
ResetText;
OperCase;
if ch<>EOT then Error('Ojidaetsa konec texta')
else writeln('Pravilno !!!');
writeln;
end.

Код данной программы не докончен. Собственно проблема заключается в том, как записать конструкцию оператора case в привычную форму, а не в одну строчку. Что именно мне нужно подкорректировать в процедуре NextCh ?

Например я могу записать так case n of 1: ...; 2: ...; n...; но я хотел бы вот так
case n of
1:
2:
3:
и т.д.

Последний раз редактировалось goldlider; 23.12.2010 в 18:00.
goldlider вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Синтаксический анализатор sin, cos, ln, exp Ruslan-9020 Общие вопросы C/C++ 3 20.05.2013 01:10
Синтаксический анализатор Lifefine Общие вопросы Delphi 3 09.10.2010 19:42
Синтаксический анализатор математических выражений Blade Общие вопросы C/C++ 7 21.05.2010 14:59
Синтаксический анализатор delphin100 Общие вопросы Delphi 10 01.05.2010 12:50