Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metodichka_SI.doc
Скачиваний:
30
Добавлен:
23.02.2015
Размер:
2.05 Mб
Скачать

3 Уровень сложности

  1. Задача о Ханойской башне.

Имеются три стержня. На одном расположено nколец различного диаметра. Перенести кольца на другой стержень, используя третий как вспомогательный. Ни в какой момент большее кольцо не должно лежать на меньшем кольце. На каждом шаге разрешается перекладывать одно кольцо.

  1. Имеется nнаселенных пунктов, перенумерованных от 1 доn(n= 10). Некоторые пары

пунктов соединены дорогами. Определить, можно ли попасть по этим дорогам из 1-го пункта в n-й. информация о дорогах задается в виде последовательности пар чиселiиj(i<j), указывающих, чтоi-й иj-й пункты соединены дорогой; признак конца этой последовательности – пара нулей.

3. Вывести символы, которые наиболее точно соответствуют приведенным картинкам.

1

2

3

4

5

6

7

8

Синтаксический анализатор

  1. Построить синтаксический анализатор для понятия простое_логическое.

TRUE

FALSE

простое_логическое ::= простой_идентификатор

Not простое_логическое

(простое_логическое знак_операции простое_логическое)

простой_идентификатор ::= буква

знак_операции ::= AND

OR

буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z

  1. Написать программу, которая по заданному простому логическому выражению вычисляет и печатает значение этого выражения.

TRUE

FALSE

простое_логическое ::= NOT простое_логическое

(Простое_логическое знак_операции простое_логическое)

знак_операции ::= AND

OR

  1. Во входном файле записано без ошибок логическое выражение следующего вида:

логическое выражение ::= truefalseоперация (операнды)

операция ::= not  and or

операнды ::= операнд операнд, операнды

операнд ::= логическое выражение

  1. У операций andиorможет быть любое число операндов, уnot– только один.

Ввести это выражение и вычислить его значение. Например,

and (or (false, not (false)), true, not (true))  false

  1. Построить синтаксический анализатор для понятия текст.

текст ::= элементэлемент текст

элемент ::= ав(текст)тексттекст

  1. Во входном файле записана (без ошибок) формула следующего вида:

<формула>::=<цифра>|(<формула><знак><формула>)

<знак>::=+|-|*

<цифра>::=|1|2|3|4|5|6|7|8|9

Ввести эту формулу и вычислить ее значение.

Например: 5→5, ((2-4);6→-12)

  1. Построить синтаксический анализатор для понятия скобки.

кругл

скобки ::= квадр

А

кругл ::= ((кругл)квадр)

В

квадр ::= квадр(кругл)

  1. Построить синтаксический анализатор для понятия скобки.

квадр

скобки ::= кругл

кругл кругл

квадр ::= +

(квадр квадр)

кругл ::= 

  1. Построить синтаксический анализатор для понятия отношение.

отношение ::= операнд знак_отношения операнд

знак_отношения ::= =

операнд ::= выражение

выражение ::= слагаемое слагаемое

слагаемое ::= множительмножитель

множитель ::= константа переменнаявыражение

константа ::= цифра цифра

переменная ::= буква буквацифра

цифра ::= 0|1|2|3|4|5|6|7|8|9

буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z

  1. Построить синтаксический анализатор для понятия текст.

текст ::= пусто элемент текст

элемент ::= буква цифразнак(текст)

цифра ::= 0|1|2|3|4|5|6|7|8|9

буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z

знак ::= +

Например, АFxC

  1. Построить синтаксический анализатор для понятия переменная.

^ *

переменная ::= идентификатор .идентификатор

список выражений

список_выражений ::= выражение , выражение

терм

выражение ::= термвыражение

множитель

терм ::= множитель терм

целое_без_знака

множитель ::= идентификатор

(выражение)

цифра

целое_без_знака ::= цифра целое_без_знака

идентификатор ::= буква буквацифра

цифра ::= 0|1|2|3|4|5|6|7|8|9

буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z

  1. Построить синтаксический анализатор для понятия логическая_формула.

конъюнкция

логическая_формула ::= конъюнкция ORпробелы логическая_формула

множитель

конъюнкция ::= множитель ANDпробелы конъюнкция

NOTпробелы множитель

переменная

множитель ::= (логическая_формула)

TRUEпробелы

FALSEпробелы

переменная ::= буква пробелы

буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z

символ_пробела

пробелы ::= символ_пробела пробелы

  1. Построить синтаксический анализатор для понятия формула.

формула ::= цифра формула знак формула

знак ::= +

цифра ::= 0|1|2|3|4|5|6|7|8|9

  1. Построить синтаксический анализатор для понятия список_параметров.

список_параметров ::= параметрпараметр

имя = цифра цифра

параметр ::= имя = (список_параметров)

имя ::= буква буква буква

цифра ::= 0|1|2|3|4|5|6|7|8|9

буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z

  1. Построить синтаксический анализатор для понятия простое_выражение.

простое_выражение ::=

простой_идентификатор

::= (простое_выражение знак_операции простое_выражение)

простой_идентификатор ::= буква

знак_операции ::= 

*

буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z

  1. Построить синтаксический анализатор для понятия список_списков.

список_списков ::= список ; список

список ::= элемент элемент

элемент ::= буква

буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z

  1. Построить синтаксический анализатор для понятия константное_выражение.

константное_выражение ::=

цифра цифра

::= константное_выражениеконстантное_выражение )

цифра ::= 

  1. Построить синтаксический анализатор для понятия формула.

формула ::= цифраМ (формула, формула)m(формула, формула)

цифра ::= 

  1. В текстовом файле записана без ошибок формула следующего вида:

формула ::= цифраМ (формула, формула)m(формула, формула)

цифра ::= ,

где М обозначает функцию max, аm–min. Вычислить (как целое число)

значение данной формулы. Например, М(5,m(6,8))6.

  1. Построить синтаксический анализатор для понятия логическое выражение (ЛВ):

ЛВ ::= true  false  ( ! ЛВ )  ( ЛВ & ЛВ )  ( ЛВ | ЛВ ),

где знаки ! & и | обозначают соответственно отрицание, конъюнкцию и дизъюнкцию.

  1. В текстовом файле записано без ошибок логическое выражение (ЛВ) в следующей форме:

ЛВ ::= true  false  ( ! ЛВ )  ( ЛВ & ЛВ )  ( ЛВ | ЛВ ),

где знаки ! & и |обозначают соответственно отрицание, конъюнкцию и дизъюнкцию.

Вычислить (как boolean) значение этого выражения.

  1. Построить синтаксический анализатор для понятия формула.

формула ::= терм | терм + формула | терм – формула

терм ::= имя| (формула) |[ формула] |{ формула }

имя ::= x|y|z

  1. Построить синтаксический анализатор для понятия выражение:

выражение ::= терм | терм знак выражение

знак ::= +

терм ::= множитель | множитель терм

множитель ::= число | переменная| (выражение) | множитель ^ число

число ::= цифра

переменная ::= буква

цифра ::= 0|1|2|3|4|5|6|7|8|9

буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z

  1. Построить синтаксический анализатор для понятия скобки.

кругл

скобки ::= квадр

А

кругл ::= (квадр)

В

квадр ::= кругл

  1. Построить синтаксический анализатор для понятия последовательность.

последовательность ::= {элемент разделитель}*

элемент ::= целое_число

разделитель ::= пробелы

целое_число ::= пробел целое_без_знака

пробелы ::= символ_пробела

символ_пробела пробелы

цифра

целое_без_знака ::= цифра целое_без_знака

цифра ::= 

  1. Построить синтаксический анализатор для понятия присваивание.

присваивание ::= левая_часть :=правая_часть

левая_часть ::= переменная

правая_часть ::= переменная

переменная знак_операции переменная

переменная ::= буква {буква | цифра}*

знак_операции ::= +*/

цифра ::= 0|1|2|3|4|5|6|7|8|9

буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z

  1. Построить синтаксический анализатор для понятия отношение.

отношение ::= операнд знак_отношения операнд

операнд ::= переменная

константа

константа ::= цифра {цифра}*

переменная ::= буква {буква | цифра}*

=

>

<

знак_отношения ::= <=

>=

<>

цифра ::= 0|1|2|3|4|5|6|7|8|9

буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z

  1. Построить синтаксический анализатор для понятия список_описаний.

список_описаний ::= описание;

описание; список_описаний

описание ::= список_идентификаторов :идентификатор

список_идентификаторов ::= идентификатор

идентификатор, список_идентификаторов

идентификатор ::= буква {буква | цифра}*

цифра ::= 0|1|2|3|4|5|6|7|8|9

буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z

  1. Построить синтаксический анализатор для понятия система_дорог.

система_дорог ::= количество_городов список_дорог

список_дорог ::= пробел

пробел дорога список_дорог

дорога ::= откуда пробел куда пробел длина_дороги

откуда ::= натуральное

куда ::= натуральное

количество_городов ::= натуральное

длина_дороги ::= цифра {цифра}*. цифра {цифра}*

цифра ::= 

натуральное ::= цифра

цифра натуральное

  1. Построить синтаксический анализатор для понятия граф.

граф ::= количество_вершин список_ребер

список_ребер ::= пробел

пробел ребро список_ребер

ребро ::= откуда пробел куда

откуда ::= натуральное

куда ::= натуральное

количество_вершин ::= натуральное

натуральное ::= цифра

цифра натуральное

цифра ::= .

  1. Построить синтаксический анализатор для понятия скалярный_тип.

(имя_константы {, имя_константы}*)

скалярный_тип ::= константа . . константа

имя_скаляр_типа

имя_константы ::= буква {цифра | буква}*

имя_скаляр_типа ::= буква {цифра | буква}*

константа ::= цифра {цифра}* | имя_константы

цифра ::= 0|1|2|3|4|5|6|7|8|9

буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z

  1. Построить синтаксический анализатор для понятия линейная_программа.

линейная_программа ::= присваивание

присваивание; линейная_программа

присваивание ::= левая_часть :=правая_часть

левая_часть ::= переменная

правая_часть ::= переменная

переменная знак_операции переменная

переменная ::= буква {буква | цифра}*

знак_операции ::= 

*

цифра ::= 0|1|2|3|4|5|6|7|8|9

буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z

  1. Построить синтаксический анализатор для понятия вещественное_число.

целое_число . целое_без_знака

вещественное_число ::= целое_число . целое_без_знака Е целое_число

целое_число Е целое_число

целое_без_знака ::= цифра {цифра}*

целое_число ::= целое_без_знака

{±} целое_без_знака

цифра ::= 0|1|2|3|4|5|6|7|8|9

  1. Построить синтаксический анализатор для понятия описание.

описание ::= список_имен :имя

список_имен ::= имя

имя , список_имен

имя ::= буква {буква | цифра}*

цифра ::= 0|1|2|3|4|5|6|7|8|9

буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z

  1. Построить синтаксический анализатор для понятия идентификатор.

буква

идентификатор ::= идентификатор цифра

буква

цифра ::= 0|1|2|3|4|5|6|7|8|9

буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z

  1. Построить синтаксический анализатор для понятия список_идентификаторов.

список_идентификаторов ::= идентификатор

идентификатор, список_идентификаторов

идентификатор ::= буква {буква | цифра}*

цифра ::= 0|1|2|3|4|5|6|7|8|9

буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z

  1. Построить синтаксический анализатор для понятия сумма.

сумма ::= целое {знак_операции целое}*

целое ::= цифра {цифра}*

знак_операции ::= +

цифра ::= 0|1|2|3|4|5|6|7|8|9

  1. Построить синтаксический анализатор для понятия описание_меток.

описание_меток ::= LABELметка { , метка }*;

метка ::= идентификатор | последовательность_цифр

последовательность_цифр ::= 0 . . 9999

идентификатор ::= буква {буква | цифра}*

цифра ::= 0|1|2|3|4|5|6|7|8|9

буква ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]