Системы программирования - Программирование, компьютеры и кибернетика курсовая работа

Системы программирования - Программирование, компьютеры и кибернетика курсовая работа



































Разработка программы, выводящую на экран сообщение "Hello World!". Построение синтаксических и лексических анализаторов. Приобретение лицензии Studio XE для Linux и С++ Studio для Win. Общее представление о SSE. Сравнение репозиториев github и bitbucket.


посмотреть текст работы


скачать работу можно здесь


полная информация о работе


весь список подобных работ


Нужна помощь с учёбой? Наши эксперты готовы помочь!
Нажимая на кнопку, вы соглашаетесь с
политикой обработки персональных данных

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

ФГАОУ ВПО «Северо-Восточный Федеральный университет имени М.К. Аммосова»
Выполнила: студент ИМИ группы ПМ12-2
1) подготовить место для выполнения работы и подготовить программу, выводящую на экран сообщение “Hello World!”;
3) узнать про компиляторов, изучить входные и выходные файлы;
4) Разработать лексический анализатор для языка программирования с использованием ПО LEX;
5) Приобрести лицензию Studio XE для Linux или С++ Studio для Win;
6) Кратко описать расширений MMX/SSE;
7) Написать программу умножения матриц, с замером времени на операцию.
8) Сравнить компиляторы msvs/gcc с компилятором intel;
9) Сделать анализ и обзор технологии GIT;
10) Зарегистрироваться и создать свой репозиторий.
2) Подготовить место для выполнения работы;
4) Сделать реферат для выполнения домашней работы №3;
5) Разработать лексический анализатор для языка программирования с использованием LEX;
6) Описать описание продуктов VTune Amplifier, Composer, Inspector;
8) Описать расширения MMX/SSE, узнать какие языки реализуют автоматическое управление освобождением динамической памяти;
9) Установить Intel Parallel Studio XE;
10) Сравнить репозитории github и bit bucket.
· определить общие границы и контекст моделируемой предметной области;
· сформулировать общие требования к функциональному поведению проектируемой системы;
· разработать исходную концептуальную модель системы для ее последующей детализации в форме логических и физических моделей;
· подготовить исходную документацию для взаимодействия разработчиков системы с ее заказчиками и пользователями.
Суть диаграммы вариантов использования состоит в следующем. Проектируемая система представляется в виде множества сущностей или актеров, взаимодействующих с системой с помощью вариантов использования. При этом актером (actor) или действующим лицом называется любая сущность, взаимодействующая с системой извне. Это может быть человек, техническое устройство, программа или любая другая система, которая может служить источником воздействия на моделируемую систему так, как определит сам разработчик. Вариант использования служит для описания сервисов, которые система предоставляет актеру.
Диаграмма классов (class diagram) служит для представления статической структуры модели системы в терминологии классов объектно-ориентированного программирования. Класс (class) в языке UML служит для обозначения множества объектов, которые обладают одинаковой структурой, поведением и отношениями с объектами других классов.
Диаграмма состояний (statechart diagram).
Диаграммы состояний чаще всего используются для описания поведения отдельных объектов, но также могут быть применены для спецификации функциональности других компонентов моделей, таких как варианты использования, актеры, подсистемы, операции и методы. Понятие состояния (state) является фундаментальным не только в метамодели языка UML, но и в прикладном системном анализе. Вся концепция динамической системы основывается на понятии состояния. Семантика же состояния в языке UML имеет ряд специфических особенностей.
Диаграмма деятельности (activity diagram).
Данный тип диаграмм может использоваться и для отражения состояний моделируемого объекта, однако, основное назначение Activity diagram в том, чтобы отражать бизнес-процессы объекта. Этот тип диаграмм позволяет показать не только последовательность процессов, но и ветвление и даже синхронизацию процессов.
Диаграмма последовательности (sequence diagram).
На диаграмме последовательности изображаются только те объекты, которые непосредственно участвуют во взаимодействии. Ключевым моментом для диаграмм последовательности является динамика взаимодействия объектов во времени.
Чтобы выбрать диаграммы нажимаем вкладку «Создать диаграммы».
Компилятор - это программа, которая считывает текст программы, написанной на одном языке - исходном, и транслирует (переводит) его в эквивалентный текст на другом языке - целевом. Одним из важных моментов трансляции является сообщение пользователю о наличии ошибок в исходной программе.
Компиляторы составляют существенную часть программного обеспечения ЭВМ. Это связано с тем, что языки высокого уровня стали основным средством разработки программ. Только очень незначительная часть программного обеспечения, требующая особой эффективности, программируется с помощью ассемблеров. В настоящее время распространено довольно много языков программирования.
С другой стороны, постоянно растущая потребность в новых компиляторах связана с бурным развитием архитектур ЭВМ. Это развитие идет по различным направлениям. Совершенствуются старые архитектуры как в концептуальном отношении, так и по отдельным, конкретным линиям.
Наконец, бурно развиваются различные параллельные архитектуры. Среди них отметим векторные, многопроцессорные, с широким командным словом (вариантом которых являются суперскалярные ЭВМ).
· Транслятор - программа, которая переводит программу, написанную на одном языке, в эквивалентную ей программу, написанную на другом языке.
· Компилятор - транслятор с языка высокого уровня на машинный язык или язык ассемблера.
· Ассемблер - транслятор с языка Ассемблера на машинный язык.
· Интерпретатор - программа, которая принимает исходную программу и выполняет ее, не создавая программы на другом языке.
· Макропроцессор (препроцессор - для компиляторов) - программа, которая принимает исходную программу, как текст и выполняет в нем замены определенных символов на подстроки. Макропроцессор обрабатывает программу до трансляции. Любой язык обязательно подчиняется определенным правилам, которые определяют его синтаксис и семантику.
· Синтаксис - это совокупность правил, определяющих допустимые конструкции языка, т. е. его форму.
· Семантика - это совокупность правил, определяющих логическое соответствие между элементами и значением синтаксически корректных предложений, т. е. содержание языка.
Процесс компиляции предполагает распознавание конструкций исходного языка (анализ) и сопоставление каждой правильной конструкции семантически эквивалентной конструкций другого языка (синтез). Он включает несколько этапов:
· генерация и оптимизация объектного кода.
Lex -- программа для генерации лексических анализаторов, обычно используемая совместно с генератором синтаксических анализаторов yacc.
Структура входного файла: Структура lex-файла сделана подобно структуре yacc-файла; файл разделяется на три блока, разделённые строками, содержащими два символа процента:
В блоке определений задаются макросы и заголовочные файлы. Здесь также допустимо писать любой код на Си -- он будет скопирован в результирующий файл.
· Блок правил -- наиболее важная часть; она описывает шаблоны и ассоциирует их с вызовами. Шаблоны представляют собой регулярные выражения. Когда анализатор видит текст, подходящий под шаблон, он выполняет указанный код.
· Блок кода содержит операторы и функции на Си, которые копируются в генерируемый файл. Предполагается, что эти операторы содержат код, вызываемый правилами из предыдущего блока. Для сложных анализаторов бывает более удобно поместить этот код в отдельный файл, подключающийся на стадии компиляции.
Генератор lex строит лексический анализатор, задача которого - распознать из входного потока символов очередную лексему. Список лексем, который должен распознавать конкретный лексический анализатор, задается регулярными выражениями в секции правил входного файла генератора lex. По содержимому входного файла, генератор lex строит детерминированный конечный автомат в виде программы на языке С.
Генератор лексических анализаторов может применяться для построения различных преобразователей текстовой информации (конверторов), создания пакетных редакторов, реализации распознавателя директив в диалоговой программе и т.д.
Однако, наиболее важное применение лексического анализатора - это использование его в компиляторе или интерпретаторе специализированного языка. Здесь лексический анализатор выполняет функцию ввода и первичной обработки данных. Он распознает из входного потока лексемы и передает их синтаксическому анализатору (в качестве терминальных символов грамматического разбора).
Лексический анализатор может не только выделять лексемы, но и выполнять над ними некоторые преобразования. Например, если лексема - число, то его необходимо перевести во внутреннюю (двоичную) форму записи как число с плавающей или фиксированной точкой. А если лексема - идентификатор, то его необходимо разместить в таблице, чтобы в дальнейшем обращаться к нему не по имени, а по адресу в таблице и т.д. Все такие преобразования записываются на языке программирования С.
Intel C++ Compiler -- оптимизирующий компилятор, разрабатываемый фирмой Intel для процессоров семейств x86, x86-64 и IA-64. Главным достоинством компилятора являются выполняемые им высокоуровневые, а также целевые оптимизации под процессоры Intel. Компилятор работает под ОС Linux, Windows, Mac OS X.
· Автоматическое распараллеливание кода;
· Векторизация для SSE, SSE2, SSE3, SSE4;
· Оптимизация с учетом профильной информации.
Intel Parallel Studio -- параллельный пакет разработки программного обеспечения Intel, сочетающий в себе ведущие в индустрии C/C++ компилятор и Fortran компилятор, различные библиотеки, инструменты профилирования и многое другое. В комплект поставки входят программные продукты:
· Intel Parallel Advisor - поможет найти возможности распараллеливания кода с самого начала разработки приложения;
· Intel Parallel Composer - предназначен для генерирования параллельного кода, т.е. создания программ с помощью компилятора и широкого набора библиотек для многопоточных алгоритмов;
· Intel Parallel Inspector - проверит ваше параллельное приложение на корректность и найдет ошибки работы с памятью;
· Intel Parallel Amplifier - обнаружит «узкие места» в программе, которые мешают масштабируемости и увеличению производительности на мультиядерных платформах.
Parallel Studio - это набор из нескольких инструментов, который является гармоничным продолжением или расширением Microsoft Visual Studio и позволяет за счет удобства использования, понятного интерфейса и оригинальных технологий добиваться хорошей эффективности параллельных программ на мультиядерных системах.
SSE (Streaming SIMD Extensions, потоковое SIMD-расширение процессора) -- это SIMD (Single Instruction, Multiple Data, Одна инструкция -- множество данных) набор инструкций, разработанный Intel и впервые представленный в процессорах серии Pentium III, что созданы для повышения производительности в мультимедиа и информационных приложениях. Эти нововведения (включающие новые регистры, типы данных, и команды) объединяются с выполняемой моделью SIMD для повышения быстродействия приложений. Применение новых SIMD-команд значительно увеличивает производительность приложений, обрабатывающих данные с плавающей запятой, или приложений которые в основном используют алгоритмы с интенсивными вычислениями, выполняя повторяющие операции над большими массивами простых данных. Также от SSE выигрывают приложения, которым нужен постоянный доступ к большим размерам данных.
Новые SIMD-команды, реализованные в процессоре Pentium III, увеличивают производительность прикладных программ в следующих областях:
· Распознавание, синтез и компрессия речи;
В феврале 1999 года Intel представила общественности процессор Pentium III, содержащий обновление технологии MMX, получившей название SSE. До этого момента инструкции SSE носили имя Katmai New Instructions (KNI), так как первоначально они были включены в процессор Pentium III с кодовым именем Katmai. Процессоры Celeron 533A, созданные на основе ядра Pentium III, тоже поддерживают инструкции SSE. Более ранние версии процессора Pentium II, а также Celeron 533 SSE не поддерживают.
Инструкции SSE содержат 70 новых команд для работы с графикой и звуком в дополнение к существующим командам MMX. Инструкции SSE позволяют выполнять операции с плавающей запятой, реализуемые в отдельном модуле процессора. В технологиях MMX для этого использовалось стандартное устройство с плавающей запятой.
Инструкции SSE2, содержащие 144 дополнительные команды SIMD, были представлены в ноябре 2000 года вместе с процессором Pentium 4. В SSE2 были включены все инструкции предыдущих наборов MMX и SSE.
Инструкции SSE3 были представлены в феврале 2004 года вместе с процессором Pentium 4 Prescott; они добавляют 13 команд SIMD, предназначенных для ускорения выполнения сложных математических операций, обработки графики, кодирования видео и синхронизации потоков данных. Инструкции SSE3 также содержат все инструкции MMX, SSE и SSE2.
В целом SSE обеспечивает следующие преимущества:
· более высокое разрешение/качество при просмотре и обработке графических изображений;
· улучшенное качество воспроизведения звуковых и видеофайлов в формате MPEG2, а также одновременное кодирование и декодирование формата MPEG2 в мультимедийных приложениях;
· уменьшение загрузки процессора и повышение точности/скорости реагирования при выполнении программного обеспечения для распознавания речи.
Инструкции SSE и SSE2 особенно эффективны при декодировании файлов формата MPEG2, который является стандартом сжатия звуковых и видеоданных, используемым в DVD. Следовательно, оснащенные SSE процессоры позволяют достичь максимальной скорости декодирования MPEG2 без использования дополнительных аппаратных средств (например, платы декодера MPEG2).
Одним из основных преимуществ SSE по отношению к MMX является поддержка операций SIMD с плавающей запятой, что очень важно при обработке трехмерных графических изображений. Технология SIMD, как и MMX, позволяет выполнять сразу несколько операций при получении процессором одной команды. В частности, SSE поддерживает выполнение до четырех операций с плавающей запятой за цикл; одна инструкция может одновременно обрабатывать четыре блока данных. Для выполнения операций с плавающей запятой инструкции SSE могут использоваться вместе с командами MMX без заметного снижения быстродействия. Наилучшие результаты применения новых инструкций процессора обеспечиваются только при их поддержке на уровне используемых приложений. Сегодня большинство компаний, занимающихся разработкой программного обеспечения, модифицировали приложения, связанные с обработкой графики и звука, что позволило в более полной мере использовать возможности SSE. К примеру, графическое приложение Adobe Photoshop поддерживает инструкции SSE, что значительно повышает эффективность использования оснащенных SSE процессоров.
Инструкции SSE являются расширением технологий MMX, а SSE2 -- расширением инструкций SSE. Таким образом, процессоры, поддерживающие SSE2, поддерживают также SSE, а процессоры, поддерживающие инструкции SSE, в свою очередь, поддерживают оригинальные команды MMX. Это означает, что стандартные приложения MMX могут выполняться практически на любых системах. Первые процессоры производства AMD с поддержкой расширений SSE3 --это 0,09-микронные версии Athlon 64, а также все версии двухъядерных процессоров Athlon 64 X2.
Git -- распределённая система управления версиями файлов. Проект был создан Линусом Торвальдсом для управления разработкой ядра Linux.
Примерами проектов, использующих Git, являются ядро Linux, Android, Drupal, Cairo, GNU Core Utilities, Mesa, Wine, Compiz Fusion, FlightGear, jQuery, PHP, NASM, Media Wiki и некоторые дистрибутивы Linux.
Ядро Git представляет собой набор утилит командной строки с параметрами. Все настройки хранятся в текстовых файлах конфигурации. Такая реализация делает Git легко портируемым на любую платформу и даёт возможность легко интегрировать Git в другие системы.
Репозиторий Git представляет собой каталог файловой системы, в котором находятся файлы конфигурации репозитория, файлы журналов, хранящие операции, выполняемые над репозиторием, индекс, описывающий расположение файлов и хранилище, содержащее собственно файлы. Структура хранилища файлов не отражает реальную структуру хранящегося в репозитории файлового дерева, она ориентирована на повышение скорости выполнения операций с репозиторием. Когда ядро обрабатывает команду изменения, оно создаёт в хранилище новые файлы, соответствующие новым состояниям изменённых файлов. Существенно, что никакие операции не изменяют содержимого уже существующих в хранилище файлов.
По умолчанию репозиторий хранится в подкаталоге с названием «.git» в корневом каталоге рабочей копии дерева файлов, хранящегося в репозитории. Любое файловое дерево в системе можно превратить в репозиторий git, отдав команду создания репозитория из корневого каталога этого дерева (или указав корневой каталог в параметрах программы). Репозиторий может быть импортирован с другого узла, доступного по сети. При импорте нового репозитория автоматически создаётся рабочая копия, соответствующая последнему зафиксированному состоянию импортируемого репозитория.
Преимущества и недостатки git по сравнению с централизованными системами управления версиями (такими как, например, Subversion). Если же сравнивать git с «родственными» ей распределёнными системами, можно отметить, что git изначально идеологически ориентирован на работу с изменениями, а не с файлами, «единицей обработки» для него является набор изменений, или патч. Эта особенность прослеживается как в структуре самой системы (в частности -- в структуре репозитория), так и в принципах построения команд; она отражается на производительности системы в различных вариантах её использования и на достоинствах и недостатках git по сравнению с другими DVCS.
Часто называемые преимущества git перед другими DVCS:
· Развитые средства интеграции с другими VCS, в частности, с CVS, SVN и Mercurial;
· Продуманная система команд, позволяющая удобно встраивать git в скрипты;
· Репозитории git могут распространяться и обновляться общесистемными файловыми утилитами архивации и обновления, такими как rsvnc, благодаря тому, что фиксации изменений и синхронизации не меняют существующие файлы с данными, а только добавляют новые (за исключением некоторых служебных файлов, которые могут быть автоматически обновлены с помощью имеющихся в составе системы утилит;
· Отсутствие сквозной нумерации коммитов монотонно непрерывно возрастающими целыми числами;
· Отсутствие переносимой на другие операционные системы поддержки путей в кодировке Unicode в Microsoft Windows;
· Некоторое неудобство для пользователей, переходящих с других VCS. Команды git, ориентированные на наборы изменений, а не на файлы, могут вызвать недоумение у пользователей, привыкших к файл-ориентированным VCS, таким как SVN;
· Большие накладные расходы при работе с проектами, в которых делаются многочисленные несвязанные между собой изменения файлов;
· Большие затраты времени, по сравнению с файл-ориентированными системами, на формирование истории конкретного файла, истории правок конкретного пользователя, поиска изменений, относящихся к заданному месту определённого файла;
· Отсутствие отдельной команды переименования/перемещения файла, которая отображалась бы в истории как соответствующее единое действие;
· Система работает только с файлами и их содержимым, и не отслеживает пустые каталоги.
· Некоторые команды работают неожиданно, в частности, могут приводить к неочевидным ошибкам или требовать для правильной работы указания специальных параметров, когда применяются к исходно пустому репозиторию или к репозиторию, в котором ещё не было сделано ни одного коммита.
chara, charac, charact, character, character
Завершение функции и возврат значения
Cоздание/уничтожение экземпляров объектов
· //<произвольный набор символов>\r\n (занимают одну строку);
· /*<произвольный набор символов>*/(могут занимать любое число строк). Вложенные блочные комментарии не поддерживаются.
Идентификаторы и объекты могут определяться в любом месте программы, причем идентификаторы и имена объектов объявление вне объявления функций являются глобальными, например:
Язык является объектно-ориентированным. Объекты определяются следующей конструкцией:
<тип> <имя метода>(<список параметров>);
Точка входа в программу определяется функцией main0.
В ходе выполнения лабораторных работ была разработана система регулярных выражений, а также классы и действия для расширения лексического акцептора, до анализатора.
ignoreLastWord=true;stack.push(lexAcceptor);lexAcceptor=lexAcceptors[findAutomat("CharB")];
tables.base5ToBase10(Lexem); tables.processConst(Lexem, typeInt);
([0-9]+[.][0-9]*)|([0-9]*[.][0-9]+)
tables.processConst(Lexem, typeDouble);
tables.processConst(Lexem, typeInt);
ti.put(0,"keyword");tables.CheckForAlias(Lexem);tables.processKeyword(Lexem); ti.put(Lexem.groupIndex, Lexem.textOfWord);
ignoreLastWord = true; tables.debugGroupWordEndln(Lexem);
lexAcceptor=lexAcceptors[findAutomat("CharE")];tables.processConst(Lexem, typeChar);
ignoreLastWord=true;lexAcceptor=lexAcceptors[findAutomat("CharEk")];
Lexem.groupIndex=codeCharError; ti.put(0,"char error");
Lexem.groupIndex=codeCharError;ti.put(0,"char error");
lexAcceptor=lexAcceptors[findAutomat("CharE")]; Lexem.textOfWord=new StringBuffer("\\"+Lexem.textOfWord.toString());tables.processConst(Lexem, typeChar);
Lexem.groupIndex=codeCharError;ti.put(0,"char error");
ignoreLastWord=true;lexAcceptor=(fAutomat)stack.pop();
Краткое описание функций интерфейсного класса
Служебная функция для замены псевдонимов типов (boole, boolea, boolean -> bool и т.д.)
public boolean isBoolConst(lexem Lex)
Служебная функция для разрешения конфликта пересечения групп ключевых слов и булевских констант
Служебная функция проверки на принадлежность к ключевым словам
public int processIdent(lexem Lex, int type)
Функция обработки идентификаторов и занесения их в таблицу при необходимости
public int processConst(lexem Lex, int type)
Функция обработки констант и занесения их в таблицу при необходимости
public int processKeyword(lexem Lex)
Функция обработки ключевых слов и занесения их в таблицу при необходимости
public int processOperator(lexem Lex)
Функция обработки операторов сравнения и присваивания (разрешение конфликтов)
public int processLogicalOper(lexem Lex)
Функция обработки логических операторов (разрешение конфликтов)
public void base5ToBase10(lexem Lex)
Служебная функция перевода из системы счисления по основанию 5 в систему счисления по основанию 10
Служебные функции для вывода таблиц
public void debugGroupWordFill(lexem Lex)
public void debugGroupWordEndln(lexem Lex)
Служебные функции для построения отладочного представления программы в виде токенов (групп слова, индекс слова)
Функция, создающая ассоциативный массив имен групп слов и индексов этих групп
Служебная функция для вывода таблице построенной на основе массива соответствия имен и индексов групп
1) yytext[] - одномерный массив (последовательность символов), содержащий фрагмент входного текста, удовлетворяющего регулярному выражению и распознанного данным правилом;
2) yyleng - целая переменная, значение которой равно количеству символов, помещенных в массив yytext.
Встроенные переменные позволяют определить конкретную последовательность символов, распознанных данным правилом. При применении правила анализатор lex автоматически заполняет значениями встроенные переменные. Эти значения можно использовать в действии примененного правила. Пример правила:
Регулярное выражение правила определяет бесконечное множество последовательностей символов, состоящих из букв латинского алфавита. Данное правило применяется, когда из входного потока символов поступает конкретная последовательность символов, удовлетворяющих его регулярному выражению. Оператор языка С printf выводит в выходной поток эту последовательность символов.
1) yymore(). В обычной ситуации содержимое yytext обновляется всякий раз, когда производится применение некоторого правила. Иногда возникает необходимость добавить к текущему содержимому yytext цепочку символов, распознанных следующим правилом;
2) yymore() вызывает переход анализатора к применению следующего правила. Входная последовательность символов, распознанная следующим правилом, будет добавлена в массив yytext, а значение переменной yyleng будет равно суммарному количеству символов, распознанными этими правилами;
3) yyless(n). Оставляет в массиве yytext первые n символов, а остальные возвращает во входной поток. Переменная yyleng принимает значение n. Лексический анализатор будет читать возвращенные символы для распознавания следующей лексемы. Использование yyless(n) позволяет посмотреть правый контекст.
4) input(). Выбирает из входного потока очередной символ и возвращает его в качестве своего значения. Возвращает ноль при обнаружении конца входного потока;
5) output(c). Записывает символ с в выходной поток;
6) unput(c) Помещает символ с во входной поток;
7) yywrap(). Автоматически вызывается при обнаружении конца входного потока. Если возвращает значение 1, то лексический анализатор завершает свою работу, если 0 - входной поток продолжается текстом нового файла. По умолчанию yywrap возвращает 1. Если имеется необходимость продолжить ввод данных из другого источника, пользователь должен написать свою версию функции yywrap(), которая организует новый входной поток и возвратит 0.
\"[^"]* { if( yytext[yyleng - 1] == '\\')
{ /* здесь должна быть часть программы, обрабатывающая и закрывающую кавычку */ }
Входной файл генератора lex содержит одно правило.
Анализатор распознает строки символов, заключенные в двойные кавычки, причем символ двойная кавычка внутри этой строки может изображаться с предшествующей косой чертой.
Анализатор должен распознавать кавычку, ограничивающую строку, и кавычку, являющуюся частью строки, когда она изображена как \".
Допустим, на вход поступает строка "абв\"эюя".
Сначала будет распознана цепочка "абв\ и, так как последним символом в этой цепочке будет символ "\", выполнится вызов yymore().
В результате повторного применения правила к цепочке "абв\ будет добавлено "эюя, и в yytext мы получим: "абв\"эюя, что и требовалось.
· ECHO - эквивалентно printf(“%s”,yytext); . Печать в выходной поток содержимого массива yytext.
· BEGIN st - перевод анализатора в состояние с именем st.
· BEGIN 0 - перевод анализатора в начальное состояние.
· REJECT - переход к следующему альтернативному правилу. Последовательность символов, распознанная данным правилом, возвращается во входной поток, затем производится применение альтернативного правила.
Регулярное выражение, входящее в правило, определяет множество последовательностей символов.
Два правила считаются альтернативными, если определяемые ими два множества последовательностей символов имеют непустое пересечение, либо существуют такие две последовательности из этих множеств, начальные части которых совпадают.
SWITCH - определяет единственную последовательность символов SWITCH, а регулярное выражение;
[A-Z]+ - определяет бесконечное множество последовательностей символов, в том числе и SWITCH.
INT - определяют последовательность INT, которая является подпоследовательностью последовательности INTEGER, определяемой регулярным выражением
AC+ - определяет множество, являющееся пересечением множеств, определяемых выражениями
В лексическом анализаторе каждый входной символ учитывается один раз.
Поэтому в ситуации, когда возможно применение нескольких правил, действует следующая стратегия:
1) Выбирается правило, определяющее самую длинную последовательность входных символов;
2) Если таких правил оказывается несколько, выбирается то из них, которое текстуально стоит раньше других.
Если требуется несколько раз обработать один и тот же фрагмент входной цепочки символов, то можно воспользоваться функцией yyless или макрооператором REJECT.
Пример 1 (Предположим, что мы хотим подсчитать все вхождения цепочек she и he во входном тексте.
Для этого я могла бы написать следующий входной файл для lex):
[jJ][aA][nN][uU][aA][rR][yY] printf("Январь");
[fF][eE][bB][rR][uU][aA][rR][yY] printf("Февраль");
[mM][aA][rR][cC][hH] printf("Март");
[aA][pP][rR][iI][lL] printf("Апрель");
[aA][uU][gG][uU][sS][tT] printf("Август");
[sS][eE][pP][tT][eE][mM][bB][eE][rR] printf("Сентябрь");
[oO][cC][tT][oO][bB][eE][rR] printf("Октябрь");
[nN][oO][vV][eE][mM][bB][eE][rR] printf("Ноябрь");
[dD][eE][cC][eE][mM][bB][eE][rR] printf("Декабрь");
Генератор построит конечный автомат, который распознает английские наименования месяцев и выводит русские значения найденных английских слов.
Все другие последовательности входных символов без изменений копируются в выходной поток.
Composer - это не просто компилятор С++ от Intel. Он уже проинтегрирован в Visual Studio вместе с библиотекой производительности IPP и параллельной библиотекой TBB, что значительно облегчает процесс разработки параллельного кода для новичков, т.е. тех, кто еще не пользовался продуктами Intel, такими, например, как Compiler Pro, и только собирается попробовать улучшить производительность своих приложений с помощью технологий Intel.
Наличие сразу нескольких компонент в пакете позволит сразу же начать оптимизировать свою программу с использованием параллельных технологий, которые содержит Composer:
Вычислительные примитивы, реализованные в виде функций в библиотеке IPP, гарантируют высокую производительность алгоритмов на платформах Intel;
Поддержка компилятором элементов стандарта С++ 0х облегчит кодирование программистам.
Это самый востребованный и ожидаемый инструмент на сегодняшний день, так как он помогает избавиться от ошибок в многопоточной программе на этапе верификации, повышая корректность и стабильность ее исполнения. Inspector применяется не только командами тестировщиков (QA team). Нормальная инженерная практика предполагает проверку программы на наличие ошибок и самим разработчиком, хотя бы на уровне юнит-тестов (unit tests).
Я разберу, какие ошибки помогает обнаружить Parallel Inspector. Инструмент адресует два класса ошибок: ошибки многопоточности и ошибки работы с памятью, причем анализ для каждого класса запускается отдельно. Последний класс ошибок хорошо известен программистам, которые до последнего времени использовали различные инструменты, чтобы найти утечки памяти, нарушение целостности стека или доступ по несуществующим адресам. Второй класс ошибок связан с многопоточной природо
Системы программирования курсовая работа. Программирование, компьютеры и кибернетика.
Преддипломная Практика Отчет
Итоговое Сочинение Отцы И Дети Темы
В. С. Соловьев. Философское учение о праве
Реферат На Тему Документооборот Входящих Документов
Лабораторная Работа Движение
Курсовая Работа Денежная Политика
Отчет по практике по теме Техническая эксплуатация и обслуживание электрического и электромеханического оборудования
Педагогическое Руководство Самовоспитанием В Спорте Реферат
Дипломная работа по теме Центральноазиатские государства и Россия: проблемы интеграции
Курсовые Работы По Транспортному Праву
Реферат: Walmart Essay Research Paper On July 2
Реферат: Рабство в Древней Греции
Реферат по теме Белорусская экономическая модель – компонент идеологии белорусского государства
Дипломная работа: Современные методы решения экологических проблем на предприятии на примере ООО "Волготрансгаз" - дочерней структуры ОАО "ГАЗПРОМ". Скачать бесплатно и без регистрации
Курсовая работа по теме Общие вопросы организации работы социального работника
Реферат: Прибыль и источники её формирования
Курсовая Работа На Тему Железнодорожная Автоматика И Телемеханика
Реферат: Оперативно-календарне планування на підприємстві
План Сочинения По Произведению Станционный Смотритель
Учебное пособие: Методические указания к выполнению курсового проекта (работы) для студентов очного и заочного обучения по специальности 080100 «Геологическая съемка, поиски и разведка месторождений полезных ископаемых»
Основы программирования - Программирование, компьютеры и кибернетика отчет по практике
Верховенство Конституции и закона Республики Узбекистан - Государство и право реферат
Прикладні задачі, які зводяться до розв'язання диференціальних рівнянь - Математика контрольная работа


Report Page