Файл: Отчеты оформляются в виде файлов формата Microsoft Word (файлы других форматов не принимаются), размер шрифта 1214.docx
Добавлен: 12.01.2024
Просмотров: 621
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
Основные требования к отчетам по лабораторным работам
Лабораторная/практическая работа № 1
Лабораторная/практическая работа № 2
Лабораторная/практическая работа № 3
Лабораторная/практическая работа № 4
Лабораторная/практическая работа № 5
Лабораторная/практическая работа № 6
Лабораторная/практическая работа № 7
Лабораторный практикум
Основные требования к отчетам по лабораторным работам
-
Отчеты оформляются в виде файлов формата Microsoft Word (файлы других форматов не принимаются), размер шрифта: 12-14. -
На титульном листе должны быть указаны вариант задания на курсовую работу и имя системы правил в личном каталоге, которую надо проверять. -
Перечень разделов, которые должны присутствовать в отчете, указан в каждом задании на работы 1-8. -
Тестовые программы в отчете должны быть приведены только в текстовом представлении (ни в коем случае не в виде скриншотов). -
Все элементы отчета, в первую очередь – скриншоты, должны быть легко читаемы (без поворотов страницы и изменения масштаба).
Несоблюдение этих требований может привести либо к снижению оценочного балла за работу, либо к возврату отчета на доработку с последующим снижением балла.
Лабораторная/практическая работа № 1
-
Название работы: «Лексика языков программирования. Регулярные выражения». -
Цели работы: освоение основных навыков работы с учебным пакетом программ автоматизации разработки трансляторов ВебТрансБилдер, изучение и освоение пользовательского интерфейса пакета и форматов исходных данных/результатов работы, изучение метаязыка регулярных выражений и технологии разработки систем правил определения лексики языков программирования, изучение основных понятий теории конечных автоматов без памяти. -
Основные теоретические сведения:
Регулярные выражения представляют собой формализм, используемый для описания процесса порождения цепочек символов. Регулярные выражения широко используются и в других целях, в частности, для поиска вхождений строк символов в другие строки.
Основой этого метаязыка являются первичные регулярные выражения. Первичным называется регулярное выражение, порождающее (описывающее) цепочки, состоящие ровно из одного символа. Это выражения вида:
-
[<произвольный символ>], например: [a]. Говорят, что такое регулярное выражение порождает единственную цепочку, состоящую только из этого символа ([a] a). -
[<перечень символов>], например [aA]. Такое выражение порождает несколько цепочек, каждая из которых содержит в точности один символ из указанного в квадратных скобках перечня ([aA] а и [aA] А). -
[<диапазон символов>], например [0–9]. Это выражение можно считать сокращенной формой записи выражения вида [0123456789]. Оно порождает
10 цепочек, каждая из которых содержит единственную десятичную цифру.
В описываемом диалекте языка регулярных выражений используются метасимволы «[», «]» и «–», не принадлежащие определяемым цепочкам символов. Существуют и другие метасимволы, которые будут определены позже.
С двумя формами записи первичного регулярного выражения (перечень символов и диапазон символов) связаны три умолчания, о которых всегда нужно помнить.
Во-первых, для указания диапазона символов необходимо точно знать таблицу кодирования символов, чтобы быть уверенным, что в диапазон не попадут «лишние» символы. Например, при использовании кодировки ASCII запись вида [a–F] нельзя использовать для определения старших шестнадцатеричных цифр. Правильной будет запись [a–fA–F].
Во-вторых, считается, что после символа с максимальным значением кода следует символ с минимальным значением (в системе кодирования ASCII после символа с кодом 255 идет символ с кодом 0).
В третьих, метасимвол дефиса (минуса) нельзя определять «внутри» перечня. Если этот метасимвол нужно определить как символ алфавита описываемого языка, то в первичном выражении он должен быть записан либо сразу после метасимвола «[», либо непосредственно перед метасимволом «]».
Так, например, регулярные выражения [–+*/] или [+/*–] порождают каждое ровно по четыре цепочки: –,+,*,/, но выражение [+–*/] в системе кодирования ASCII порождает ровно 256 цепочек длины 1, т.е. цепочки, содержащие все символы этого алфавита.
С учетом умолчаний допускается записывать перечни и диапазоны последовательно без каких-либо разделителей между метасимволами «[» и «]». Поэтому регулярные выражения [abk–osx–z] и [abklmnosxyz] являются эквивалентными, т. е. порождают одно и то же множество цепочек символов.
При форматировании текстов программ на экране или бумаге для удобного восприятия их человеком обычно используются такие символы, как табуляция, перевод строки и возврат каретки.
Для них в метаязыке регулярных выражений используются общепринятые обозначения (заимствованные из С-подобных языков):
\t – символ табуляции,
\n – символ новой строки,
\r – символ перевода каретки.
Аналогичный способ (экранирование следующего символа) применяется для представления символов \, [, ], ", являющихся одновременно метасимволами языка регулярных выражений:
\\ – один символ \ ,
\[ – символ [ ,
\] – символ ] ,
\" – символ " .
Простым называется произвольное регулярное выражение, заключенное в круглые скобки. Например, выражение ([0–9]) – простое выражение.
К первичным и простым (в некоторых диалектах – только к первичным) регулярным выражениям применяются следующие знаки операций (первые три называются квантификаторами), используемые для описания цепочек, длина которых больше единицы, и пустых цепочек (т. е. цепочек длины 0).
-
Операция «Пусто или в точности одно» (знак операции ?).
Запись вида [–+]? следует понимать, как возможно отсутствующий знак числа. Это выражение порождает либо пустую цепочку, либо один символ –, либо один символ +.
-
Операция «Одно или несколько» (знак операции +).
Запись вида [0–9]+ является типичным определением целой десятичной константы без знака (порождает все возможные непустые цепочки из десятичных цифр произвольной длины);
-
Операция «Пусто, одно или несколько» (знак операции *):
Запись вида [0–9a–zA–Z]* является типичной частью определения идентификаторов и порождает произвольную, возможно, пустую цепочку, состоящую из букв и/или цифр. Полное определение идентификатора может выглядеть так: [a–zA–Z][0–9a–zA–Z]*
Это регулярное выражение порождает цепочки, начинающиеся с любой латинской буквы, за которой в произвольном порядке может следовать сколько угодно латинских букв и/или цифр.
К первичным выражениям, простым выражениям, и выражениям, построенным с использованием квантификаторов ?, + и * могут применяться еще две операции – конкатенации и выбора.
-
Операция конкатенации (не имеет знака операции).
Два последовательно записанных первичных или простых регулярных выражения понимаются как выражение, порождающее цепочку из двух символов. Первый символ порождается первым выражением, второй символ – вторым. Например, выражение [/][*] порождает цепочку символов /*, понимаемую обычно как начало блочного (многострочного) комментария в С-подобных языках.
Операция конкатенации не коммутативна (выражение [*][/] порождает совсем другую цепочку символов */, отличную от цепочки, порождаемой выражением [/][*]). Операция конкатенации может применяться к результату другой конкатенации, например: [>][>][=] – это определение знака операции «сдвинуть вправо и присвоить» в языках С/С++.
Во многих диалектах метаязыка регулярных выражений допускаются выражения вида "<произвольная строка символов>", каждое из которых порождает цепочку, совпадающую с <произвольная строка символов>. Например, выражение "else" считается эквивалентным выражению [e][l][s][e].
-
Операция выбора (знак операции | ).
Запись вида [*] | [/] порождает либо *, либо /. В некоторых случаях ее использование эквивалентно перечню [*/] (или диапазону). Однако существуют такие группы слов, при определении которых невозможно ограничиться только первичными регулярными выражениями, приходится использовать все или некоторые операции 1-5.
Пакет ВебТрансБилдер не поддерживает такие виды первичных выражений, используемые во многих диалектах, как:
– метасимвол «.» для обозначения произвольного символа определяемого языка; вместо этого используется пустая пара квадратных скобок [] (следует помнить, что пробел – это тоже символ и выражение [] вовсе не эквивалентно выражению [ ]);
– знак операции инверсии перечня/диапазона символов «^»; вместо этого используются квантифицируемые выражения (или выражение []) в сочетании с выражениями, следующими за ними. Так например, запись вида [/][/][]*[\n] пакетом ВебТрансБилдер понимается и обрабатывается так: два символа «косая черта», за которыми следует произвольная цепочка, завершающаяся символом новой строки (это традиционная для С-подобных языков определение однострочного комментария). При использовании знака операции инверсии это выражение могло бы выглядеть так: [/][/][^\n]*[\n]
Метаязык регулярных выражений позволяет определять правила образования цепочек символов произвольной длины, являющихся словами формального языка. Некоторые языки (называющиеся словарными), например, язык двоичных чисел, могут быть полностью определены на метаязыке регулярных выражений.
Для построения системы лексических правил языка программирования, слова которого образуют несколько групп, играющих разные роли в программах, используются именованные регулярные выражения, называемые регулярными определениями:
<наименование группы слов> : <регулярное выражение>
Совокупность таких правил называется системой регулярных определений, задающих способы порождения нескольких групп слов. Пример системы регулярных определений для групп слов, из которых может состоять оператор присваивания в С-подобных языках (в этом примере не определяются все группы слов языка С):
Ident | : | [a–zA–Z][0–9a–zA–Z]* |
Const | : | [0–9]+([.][0–9]*)? |
Const | : | [0–9]*[.][0–9]+ |
WordForFormatting | : | [ \r\n\t]+ |
SignOfOperation | : | [–+*/] |
Delimiter | : | [;] |
AssignSign | : | [=] |
Во второй и третьей строках этой системы используется одно и то же имя группы слов для разных регулярных выражений. Этот способ определения допускается во многих диалектах языка регулярных определений, в том числе том, который реализуется ВебТрансБилдером. Таким образом, операция выбора в некоторых случаях может быть заменена повторным использованием наименования группы слов в системе регулярных определений.
Система регулярных определений может быть преобразована в оптимальный конечный автомат без памяти, способный распознавать правильные слова всех заданных групп. Начальный этап алгоритма этого преобразования необходимо изучить по [1], стр. 103-107.
-
Порядок выполнения работы (рекомендуется использовать в качестве примера систему правил Samples/Пример1):
-
Изучить интерфейс пакета ВебТрансБилдер: запуск, регистрация, состав элементов основного окна, команды меню. Используя справку ВебТрансБилдера (команда меню «Помочь»), изучить структуру таблицы системы редактируемых правил основного окна, приемы и способы формирования/редактирования ее содержимого. -
Освоить:
-
настройку и сохранение личных параметров (пункт меню «Настроить»); -
открытие имеющейся в базе данных системы правил (пункт меню «Открыть»); -
редактирование правил (щелчок левой кнопкой мыши по заполненной строке таблицы «Видимые-редактируемые правила»); -
автодобавление правила (щелчок левой кнопкой мыши по последней (пустой) строке таблицы «Видимые-редактируемые правила»); -
операции сортировки таблицы правил (щелчок левой кнопкой мыши по клетке «Левая часть» заголовка таблицы); -
скрытие/отображение действий (щелчок левой кнопкой мыши по клетке «Правая часть» заголовка таблицы); -
добавления пустых строк, удаления, вырезания и вставки правил (щелчок правой кнопкой мыши по правилу в таблице); -
сохранение системы правил (пункт меню «Сохранить как»).