Вход


Главная страница >> Учебный процесс >> Задачник >> Олимпиадные задачи (с решениями) >> Разное >> Номер 2

[Назад]    [Содержание ]    [Вперед]

  


Номер 2


  Условие: Номер 2


Задача 2. Пусть грамматика языка описывается следующим образом: <выражение>::=<операнд> <on> <операнд> | <операнд> <on>::=+|-|* <операнд>::=<переменная> | <целое без знака> <переменная>::= A | B | C | D | ... | Z <целое без знака>::= 1 | 2 | 3 | 4 | ... | 9 | 0 <оператор>::=<IF-оператор> | <WHILE-оператор> | <присвоить> <присвоить>::=<переменная>:=<выражение> <IF-оператор>::= IF <условие> THEN <оператор> ELSE <оператор> <WHILE-оператор>::= WHILE <условие> DO BEGIN <оператор> END <условие>=<выражение> > <выражение> <программа P>=<оператор> | <программа P><оператор> Задается текст программы P. Каждый оператор программы Р начинается с новой строки. Оператор может быть записан в нескольких строках. Ввод программы осуществляется из файла. Имя файла вводится с клавиатуры. В программе все переменные и ключевые слова записываются заглавными буквами латинского алфавита. Текст вводимой программы Р синтаксически правильный. Написать программу, оптимизирующую введенный текст программы Р по следующим правилам: Если в операторе IF условие всегда истинно (ложно) (например 2>1 (1>2)), то в текст преобразованной программы включается только оператор, стоящий за THEN ( за ELSE, если он есть). Если в операторе WHILE условие всегда ложно, то WHILE- оператор из текста программы исключается. Если в операторах IF, WHILE в <условие> или в операторе присваивания в правой части стоит выражение, численное значение операндов которого известно, то это значение вычисляется и записывается вместо <выражения> в условие или вместо правой части оператора присваивания соответственно. Если в двух операторах присваивания (обозначим их А и В) в программе Р в левой части оператора стоит одна переменная, и эта переменная не используется ни в правой части операторов присваивания, ни в условиях IF- или WHILE-операторов, встречающихся в тексте программы между операторами А и В, то в программе Р остается только оператор В. Если внутри тела цикла оператора WHILE стоит оператор присваивания, и переменная из левой части этого оператора не встречается в <условии>, то этот оператор выносится из цикла и ставится перед ним. Если в ветках THEN и ELSE оператора IF стоит один и тот же оператор присваивания (переменные в левых частях этих двух операторов совпадают, а значения правых частей одинаковы, например, IF A>B THEN L:=A+B ELSE L:=B+A), то этот оператор присваивания записывается вместо IF-оператора. Вывод программы оптимизатора направляется в файл с именем код.OUT.

  Решение задачи: Номер 2


Решение задачи 2. Другими словами необходимо написать программу, выполняющую те же действия, что и команда RENUM языка ВASIC.

Назад



[Назад]    [Содержание ]    [Вперед]

  


  
За содержание страницы отвечает Гончарова М.Н.
©
Кафедра СПиКБ, 2002-2017