Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Diploma_All

.pdf
Скачиваний:
20
Добавлен:
05.06.2015
Размер:
1.37 Mб
Скачать

Первые из них традиционны для YACC и предоставляют информацию о текущем токене. yyleng, yypos и yytext возвращают длину текущего токена, позицию в текущем буфере и текст токена. Текст создается так, чтобы избежать создания объекта, если это не требуется. yytext возвращает неизменяемую строку,

а не массив или строку, как было принято раньше. yyless перемещает входной указатель назад так, что все кроме первых n символов текущего токена подвергаются разбору при следующем проходе yylex.

Последние три метода полезны только для семантических действий лексического анализатора. Традиционный BEGIN устанавливает начальное условие для лексического анализатора. Начальное условие — это целочисленная переменная, хранящаяся в экземпляре лексического анализатора в переменной currentScOrd.

3 . 3 Генератор синтаксических анализатор ов GPPG

3.3.1 Описание

Gardens Point Parser Generator (GPPG) — это генератор LARL(1)-анализато-

ров, который на входе принимает файл спецификации, написанном на языке подобном YACC и BISON, а на выходе производит файл на языке C#.

Синтаксические анализаторы, произведенные GPPG, рассчитаны на работу с лексическими анализаторами, построенными GPLEX, но могут быть использованы и с другими лексический анализаторами, написанными вручную или произведенными другими генераторами. GPPG и производимые им анализаторы используют обобщенные типы, определенные в C# 2.0, поэтому исполнение как утилиты GPPG, так и производимых ею анализаторов требует установленной среды выполнения Microsoft .NET 2.0.

GPPG поставляется с библиотекой ShiftReduceParser.dll, которая должна находиться в той же папке, что и GPPG. Синтаксические анализаторы, производимые GPPG также зависят от этой библиотеки.

Это приложение было разработано как часть проекта Ruby.NET, для которого оно является жизненно-важным. GPPG тесно связан с приложением «Managed

61

Package Parser Generator», который поставляется вместе с пакетом Visual Studio Managed Babel.

3.3.2 Использование

Синтаксические анализаторы, генерируемые GPPG, имеют простой для разработчика интерфейс. Экземпляры синтаксического анализатора могут быть созданы любым из конструкторов, определенных в пользовательском коде. Имя класса парсера — «Parser», однако оно может быть переопределено.

Обычно в коде лексический анализатор и обработчик ошибок связываются с экземпляром синтаксического анализатора. В свою очередь лексический анализатор ассоциируется с некоторым входным текстом. Экземпляр синтаксического анализатора вызывается методом Parse(), унаследованном из абстрактного ба-

зового класса ShiftReduceParser. Метод Parse имеет следующую сигнатуру:

public bool Parse() { ... }

Этот метод возвращает ложь, если синтаксический анализ не удался, и истину в обратном случае. Следует отметить, что значение «ложь» возвращается при аварийном завершении синтаксического разбора и не зависит от найденных при разборе ошибках текста.

Обычно от синтаксического анализатора ожидается нечто более, чем просто возвращение значений «истина» или «ложь». Во многих случаях от синтаксического анализатора ждут построения некоторого абстрактного дерева разбора и/или таблиц символов как побочный эффект успешного синтаксического разбора. В таком случае, результат обычно помещается в доступные пользователю открытые поля.

3.3.3 Производимый файл

На выходе GPPG производит файл на языке C#, содержащий следующее:

перечисление, содержащее токены:

public enum Tokens {error=127, EOF=128, ... }

определение «семантического типа», объявленного во входной грамматике:

public partial struct ValType { ... }

«Семантический тип» - это тип, который возвращает лексический

62

анализатор через переменную yylval. Этот аргумент типа отвечает за традиционный для YACC-подобных утилитYYSTYPE. Структура будет разделенной, если в файл спецификации «*.y» включить маркер

«%partial».

определение класса, реализующего синтаксический анализатор: public partial class Parser : ShiftReduceParser<ValType, LocType> { ...}

Класс будет разделенным, если в разделе объявлений файла спецификации «*.y» включить маркер «%partial». Это определение класса реализует обобщенный класс ShiftReduceParser с конкретными значениями параметров типа ValType и LocType, указанными в файле спецификации, которые замещают YYSTYPE и YYLTYPE соот-

ветственно.

Сгенерированный исходный файл на языке C#, так же как определение вышеупомянутых типов, также содержит таблицы синтаксического анализа для синтаксического анализатора и код для семантических действий, указанных пользователем. Синтаксический анализатор реализует алгоритм восходящего синтаксического анализа LALR(1) (Look Ahead LR), известный также как алгоритм типа «перенос/свертка» («shift-reduce»), и зависит от неизменного во время выполнения модуля «ShiftReduceParser.dll». Основной класс времени выполнения — обобщенный тип с двумя параметрами типа, которые определяются спецификацией грамматики.

Если используется опция командной строки «/defines» или входной файл содержит маркер «%defines», тогда создается дополнительный выходной файл. Этот файл будет иметь название «basename.tokens», где basename — название входного файла, без расширения имени файла. Этот файл содержит список всех символьных токенов, по одному на каждую строку. Названия — синтаксически правильные ссылки на нижележащие константы перечисления.

3.3.4 Интерфейсы

Экземпляры синтаксического анализатора содержат открытое поле scanner. Предполагается, что этому полю синтаксического анализатора будет присвоена ссылка на лексический анализатор, который реализует класс

63

IScanner, описанный в разделе «Интерфейс синтаксического анализатора». Не-

смотря на свое имя, IScanner — это абстрактный базовый класс лексических анализаторов, а вовсе не интерфейс. Базовый класс предоставляет API, требуемый компонентом времени выполнения GPPG, библиотекой ShiftReduceParser.dll. Разумеется лексические анализаторы обычно будут реализовывать и другие средства, требуемые семантическими действиями лексического анализатора. Эти действия будут использовать более богатый API, который поддерживается конкретным классом лексического анализатора, но механизм ПС-анализа сам по себе нуждается только в подмножестве, определенном в базовом классе.

Код пользователя, определенный в синтаксическом анализаторе, также может иметь доступ к более богатому API конкретного класса лексического анализатора, приводя ссылку на лексический анализатор из абстрактного типа к конкретному типу.

Абстрактный класс лексического анализатора — это обобщенный тип с двумя параметрами типа. Первый из них, YYSTYPE — это семантический тип токе-

нов лексического анализатора. Если грамматика не определяет семантический тип, то по умолчанию он int. Начиная с версии 1.2 GPPG, семантический тип может быть любым CLR-типом. Предыдущие версии требовали тип значения.

Второй параметр типа, YYLTYPE, является «типом позиции», который ну-

жен для отслеживания текущего положения в тексте, который подвергается синтаксическому анализу.

Если GPPG используется с опцией «/gplex», то выходной файл содержит класс-обертку ScanBase, реализующий обобщенный тип IScanner и некоторые другие возможности. Более подробно это рассмотрено в разделе 3.2 «Генератор лексических анализаторов GPLEX».

Использование синтаксических анализаторов GPPG с не LEX-подобными лексическими анализаторами

GPPG успешно использовался и с рукописными сканерами, и со сканерами, произведенными инструментальными средствами, типа COCO/R, которые не совсем LEX-подобны. В случае новых лексических анализаторов код пишется так, чтобы соответствовать интерфейсу IScanner. В случае существующих лексиче-

ских анализаторов, или лексических анализаторов, произведенных другими

64

инструментальными средствами обычно необходимо написать код адаптера, чтобы обернутьAPI сканера, чтобы соответствовать ожидаемому интерфейсу.

65

4 Глава 4

Организационно-экономический раздел

Определение затрат на разработку программного продукта

Дипломант: Транченко Д. В. Консультант: Андрианова Н. А.

66

4 . 1 В в е д е н и е

Данная глава посвящена количественной оценке материальных затрат на производство представленного в дипломной работе программного продукта, позволяющего редактировать конечный плоский нет-лист, предоставляя пользователю графический интерфейс, отражающий заложенную изначально иерархию элементов.

Ниже перечислены плюсы разработанного мною продукта с точки зрения экономической выгоды:

данная программа решает очень специфическую задачу и аналогов ей не существует;

программа разработана с использованием библиотеки .NET 2.0, которая широко распространена, бесплатна для скачивания, поддерживается всеми ОС Windows, начиная с Windows 98, а также имеет очень близкий аналог для Linux (open source проект MONO, бесплатная библиотека) и использует промежуточный язык (MSIL), что делает ее кросс-платформенной и не зависящей от аппаратной реализации ПК;

при разработке программы были использованы модули, существующие на условиях свободного и бесплатного распространения, коммерческие модули использованы не были;

установочный файл программы имеет небольшой размер, что снижает затраты на тиражирование и передачу по сети Интернет;

важным фактором является объектно-ориентированный подход, примененный при разработке данного программного продукта, который позволяет быстро и просто поддерживать и расширять его в дальнейшем, даже если поддержку будет осуществлять другой человек. Также разработанные классы можно будет использовать повторно в других проектах.

Кминусам можно отнести узко направленность продукта, что ограничит спрос на него. Однако программа изначально не предназначалась для коммерческого распространения, а была разработана для конкретного заказчика, хотя это не исключает продажу данного продукта на рынке ПО.

67

4 . 2 Теоретическ ая часть: «Себестоимость программного продукта»

4.2.1 Понятие себестоимости продукции

Себестоимость продукции (работ, услуг) представляет собой стоимостную оценку используемых в процессе производства продукции (работ, услуг) природных ресурсов, сырья материалов, топлива, энергии, основных фондов, трудовых ресурсов, а также других затрат на ее производство и реализацию.

Для рационального управления следует постоянно отслеживать наши затраты, подсчитывать себестоимость за определенные периоды времени, это определяется постоянным изменением данного показателя.

Состав затрат по структуре и видам одинаков для большинства предприятий, но удельный вес их неодинаков у разных предприятий. Например, в легкой и пищевой промышленности затраты на сырье составляют 80 — 90 %, такие отрасли называются материалоемкими. В добывающих отраслях удельный вес затрат на заработную плату доходит до 50 %, т.е. данная отрасль является трудоемкой. Следовательно, структура себестоимости позволяет определить главные направления ее снижения. Производство ПО относится к трудоемким и наукоемким производствам, так как затраты на материалы намного малы по сравнению с затратами на труд, а зависимость от новых технологий очень высока.

Как правило, себестоимость подсчитывают как среднеарифметическую взвешенную величину. Выделяют среднемесячную, среднеквартальную, среднегодовую себестоимость. Рассчитывается себестоимость единицы продукции, всей товарной продукции, сравнимой и т.д.

Расчет себестоимости единицы продукции с разбивкой на статьи затрат называют калькуляцией. Она может быть плановой — на плановый период, нормативной — исчисленной по действующим нормам, отчетной — на основе данных бухгалтерского учета и отражает сумму фактических затрат.

Себестоимость может быть построена по элементам и статьям затрат. Элементы затрат характеризуют экономическое содержание, что и в каком

объеме вошло в себестоимость, независимо от вида продукции. Объемы конкретных затрат группируются по следующим элементам:

материальные затраты (за вычетом стоимости возвратных отходов);

68

затраты на оплату труда;

отчисления на социальные нужды;

амортизация основных фондов;

прочие затраты.

Группировка расходов по элементам позволяет осуществлять контроль за формированием, структурой и динамикой затрат по видам, характеризующим их экономическое содержание. Это необходимо для изучения соотношения живого и прошлого (овеществленного) труда, нормирования и анализа производственных запасов, исчисления частных показателей оборачиваемости отдельных видов нормируемых оборотных средств, а также для других расчетов отраслевого, национального и народнохозяйственного уровня (в частности, для исчисления величины создаваемого в промышленности национального дохода).

Рассчитанные поэлементно затраты всех материальных и топливно-энерге- тических ресурсов используются для определения планового уровня материальных затрат и оценки его соблюдения. Анализ поэлементного состава и структуры затрат на производство дает возможность наметить главные направления поиска резервов в зависимости от уровня материалоемкости, трудоемкости и фондоемкости производства.

Калькуляция по статьям фиксирует в каком масштабе (подразделения, предприятия в целом) и какие расходы произведены. Постатейное отражение затрат в плане, учете, отчетности и анализе раскрывает их целевое назначение и связь с технологическим процессом. Эта группировка используется для определения затрат по отдельным видам вырабатываемой продукции и месту возникновения расходов (цехам, участкам, бригадам). На основании этого мы выявляем непроизводственные затраты и потери, производим факторный анализ изменений.

Типовая группировка затрат по статьям калькуляции установлена «Основными положениями по планированию, учету и калькулированию себестоимости продукции на промышленных предприятиях»:

сырье и материалы;

возвратные отходы (вычитаются);

покупные комплектующие изделия;

69

полуфабрикаты и услуги производственного характера;

топливо и энергия на технологические цели;

заработная плата (основная и дополнительная) производственных рабочих;

отчисления в бюджет;

расходы на подготовку и освоение производства;

износ инструментов и приспособлений целевого назначения;

общепроизводственные расходы;

общехозяйственные расходы;

потери от брака;

прочие производственные расходы;

коммерческие расходы.

Часть калькуляционных статей – в основном одноэлементные, т. е. однородные по своему экономическому содержанию, расходы. К ним относятся сырье и материалы, покупные комплектующие изделия и полуфабрикаты, топливо и энергия на технологические цели, основная и дополнительная заработная плата производственных рабочих, отчисления на социальное страхование. При их анализе нельзя ограничиться лишь показателями в целом по предприятию, так как при этом нивелируются результаты, достигнутые при выпуске отдельных изделий. Поэтому расчеты влияния отдельных факторов на общую величину затрат по этим статьям в последствии детализируются по отдельным изделиям, видам расходуемых материалов, системам и формам оплаты труда производственных рабочих на основе данных отчетных калькуляций.

Остальные статьи себестоимости являются комплексными и объединяют несколько экономических элементов. Так, статья «Расходы на содержание и эксплуатацию оборудования» включает затраты материалов, энергии, топлива, расходы на оплату труда, амортизацию основных фондов. Комплексный характер носят и такие статьи себестоимости, как расходы на подготовку и освоение производства, цеховые, общезаводские (общехозяйственные) и прочие производственные расходы. Эти затраты обусловлены прежде всего общим объемом и организационно-техническим уровнем производства и анализируются, как пра-

70

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