Изобретение относится к транслятору, в частности к организации и построению транслятора для машинного языка высокого уровня.
Транслятор представляет собой компьютерную программу, которая переводит машинную программу, составленную на входном языке транслятора высокого уровня, легко воспринимаемом людьми, в программу на выходном языке транслятора, исполняемую вычислительной машиной. В типовом случае транслятор включает несколько функциональных блоков. Например, обычный транслятор может включать лексический анализатор, который осуществляет просмотр в исходной программе транслятора и идентифицирует последовательные лексемы (минимальные единицы языка, имеющие значения) в исходной программе.
Обычный транслятор также включает синтаксический анализатор, который получает в качестве входных данных грамматику, определяющую язык, подлежащий транслированию, и последовательность операций, связанных с грамматикой. Синтаксический анализатор образует "синтаксическое дерево" (дерево грамматического разбора) для операторов исходной программы в соответствии с грамматическими правилами и операциями. Для каждого оператора исходной программы синтаксический анализатор генерирует синтаксическое дерево исходного ввода данных рекурсивным способом "снизу вверх" в соответствии с подходящими грамматическими правилами и определениями. Таким образом, синтаксическое дерево формируется из узлов, соответствующих одному или более грамматическим правилам. Генерация синтаксического дерева позволяет синтаксическому анализатору определять, подчиняются ли части входной программы правилам грамматики или нет. Если нет, то синтаксический анализатор генерирует сообщение об ошибке. Таким образом, синтаксический анализатор выполняет синтаксическую проверку, но обычно не проверяет содержание ("семантику") исходной программы. Примером известных средств синтаксического анализа может служить синтаксический анализатор LALR (lookahead, left right - "с просмотром вперед, слева направо"), который описан в гл. 4 монографии Aho, Sethi, Ullman, "Compilers: Principles, Techniques and Tools".
В обычных трансляторах после того как выполнен синтаксический анализ входной программы она вводится в семантический анализатор, который осуществляет проверку на наличие семантических ошибок, таких как несоответствие типов и т.п. Семантический анализатор оценивает, например, "семантические атрибуты" узлов синтаксического дерева. Атрибуты, которые оцениваются путем просмотра атрибутов их порождаемых узлов, называются "синтезированными атрибутами". После синтаксического и семантического анализа транслятор генерирует промежуточный код, оптимизирует промежуточный код и генерирует выходную программу.
Исходная программа транслятора сама является довольно большой и сложной. Многие пользователи продолжают работать над исходным кодом транслятора в течение всего срока пользования транслятора. Тем самым различные пользователи с их разными стилями кодирования как хорошими, так и плохими вносят вклад в формирование исходного кода транслятора. Даже если каждый программист, работающий над исходным кодом транслятора, использует хорошую практику программирования (что является маловероятным), индивидуальные стили программирования различаются, и для большинства трансляторов характерным является большое разнообразие стилей кодирования. В этих условиях для каждого транслятора важно, чтобы исходный код мог легко обновляться и поддерживаться.
С этой целью важно стандартизировать модули входной программы, а также интерфейсы между модулями. В числе известных решений, направленных на стандартизацию процедур кодирования, можно указать процедуры ADT (Типы Данных Абстрактных Конструкций) и OOP (Объектно-Ориентированное Программирование).
Задача изобретения - преодоление проблем и устранение недостатков известных из предшествующего уровня техники решений за счет введения иерархической структуры Пакетов Технологических Средств (ПТС) при построении транслятора. Каждый ПТС определяет интерфейс для манипулирования с соответствующей структурой данных, такой как таблица кодировки символов или синтаксическое дерево. Настоящее изобретение позволяет структурировать ПТС во множество уровней абстрактных конструкций, которые включают: "выделенное конкретное представление", "уровень представлений", "уровень определений" и "концептуальный уровень". Интерфейс к ПТС включает, например, концептуальный уровень и частично уровень определений. Конкретное представление и уровень представлений являются скрытыми от программиста компьютерной системы. Кроме того, настоящее изобретение обеспечивает присвоение обозначения интерфейсу на каждом уровне для осуществления операций создания/удаления, обращения, обновления и вывода.
Цели и преимущества изобретения будут понятны из нижеследующего описания и станут очевидными при использовании изобретения. Цели и преимущества изобретения могут быть достигнуты с использованием признаков изобретения и их комбинаций, охарактеризованных в пунктах формулы изобретения.
На фиг. 1 дана блок-схема компьютерной системы, соответствующей предпочтительному варианту осуществления изобретения; на фиг. 2 - концептуальная схема структуры ПТС; на фиг. 3 - пример ПТС для синтаксического дерева; на фиг. 4 - блок-схема алгоритма, иллюстрирующая модули транслятора, обеспечивающие создание структур данных в различных ПТС и обращение к ним.
Рассмотрим предпочтительные варианты осуществления изобретения, иллюстрируемые чертежами, где одни и те же элементы обозначены одинаковыми ссылочными позициями.
Изобретение относится к устройству и способу, обеспечивающим повышение надежности, удобство сопровождения и удобочитаемость программных средств. На фиг. 1 представлена блок-схема компьютерной системы 100, соответствующей изобретению. Компьютерная система 100 содержит центральный процессор 102, память 104 и шины ввода/вывода 106. Специалистам в данной области техники должно быть ясно, что компьютерная система 100 может также включать множество Других элементов, не показанных на чертеже для сохранения его наглядности, например, дисковые запоминающие устройства, клавиатуры, дисплеи, соединения с сетями, дополнительные шины памяти, дополнительные центральные процессоры и т.д.
Память 104 содержит входную программу 110 транслятора, транслятор 111 и выходную программу 124 транслятора. Транслятор 111 включает лексический анализатор 112, синтаксический анализатор 114, семантический анализатор 116, оптимизатор кода 120 (не обязателен) и генератор кода 122. Транслятор 111 вводит входную программу 110 и обрабатывает входную программу для преобразования ее в выходную программу 124. Элементы транслятора 112-116 обрабатывают каждый оператор во входной программе 110 для генерации промежуточного кода. Память 104 также включает множество пакетов технологических средств (ПТС) 133, как описано ниже. Определенные части транслятора (например, интерфейс синтаксического дерева) организованы (или структурированы) как иерархия пакетов технологических средств. Эти ПТС в трансляторе на языке Pascal не содержат информационных данных. ПТС являются структурированными частями программных средств, которые манипулируют некоторыми глобальными данными (и осуществляют отсылки на эти данные). В других вариантах, однако возможно создавать и кодировать ПТС таким образом, чтобы они могли обрабатывать не только эти конкретные данные (например, конкретный перечень имен таблицы перечней имен, одно синтаксическое дерево и т.д.), но любые данные, которые подходят к функциями этих ПТС в качестве параметров.
Как должно быть ясно специалисту в данной области техники, все части транслятора 111 выполнены в виде команд, хранящихся в памяти 104 и выполняемых центральным процессором 102. Синтаксический анализатор 114 обращается к стековой памяти 135 синтаксического дерева. Синтаксический анализатор 114 использует грамматику, которая включает правила и связанные с ними операции, соответствующие правилам. Операции грамматики осуществляют обращение к ПТС 133, включая ПТС 134 синтаксического дерева, с использованием функций интерфейсов в ПТС.
Семантический анализатор 116 проходит по синтаксическому дереву ПТС 134 синтаксического дерева для всей входной программы (или для большей ее части), создаваемой синтаксическим анализатором 114, и рекурсивно проходит дерево, вызывая соответствующие подпрограммы семантического анализа.
Семантический анализатор 116 распечатывает сообщения об ошибках и/или останавливает выполнение программы, если найдены семантические ошибки. Если семантических ошибок не найдено, то семантический анализатор 116 выводит деревья для программно-совместимых компьютерных систем (ПСК) в представлении для предварительного преобразования способом, известным для специалистов в данной области техники (Aho et al., "Compilers: Principles, Techniques and Tools", p.p. 735-737). Оптимизатор кода 120 (не обязателен) оптимизирует это представление для предварительного преобразования и выводит его в оптимизированной форме (например, неиспользованные фрагменты кода могут быть опущены). Генератор кода 122 предпочтительно преобразует представление для предварительной обработки в выходную программу 124 способом, также хорошо известным специалистам в данной области техники.
Предпочтительный вариант осуществления изобретения относится к транслятору SPARCpascal для языка программирования Pascal. Транслятор сам предпочтительно составлен на универсальном языке программирования Си и выполняется под управлением операционной системы Solaris, которая поставляется компанией Sun Microsystems и связана с операционной системой Unix. Solaris - это торговая марка компании Sun Microsystems. Торговые марки SPARC - это торговые марки компании SPARC International, Inc. Unix - это торговая марка, зарегистрированная в США и других странах, эксклюзивно лицензируемая через компанию Х/Ореп Соmpany, LTD.
Как показано на фиг. 4, ПТС используются для таблицы идентификаторов, таблицы перечня наименований, интерфейса, например YATTR, который определяет конкретные семантические операции для грамматики YACC языка Pascal и ПСК-деревьев. Таблица идентификаторов и таблица перечня имен (также называемая таблицей кодировки символов) описаны в совместно поданной заявке на "Способ преобразования входной программы транслятора и устройство для его осуществления" того же заявителя. Синтаксическое дерево описано в совместно поданной заявке на "Способ оценки семантических атрибутов при синтаксическом анализе и устройство для его осуществления" того же заявителя. Интерфейс YATTR представляет собой интерфейс семантических операций для обычной грамматики YACC языка Pascal. ПСК-деревья описаны, например, в монографии Aho et al., "Compilers: Principles, Techniques and Tools", p. p. 735-737. Другие варианты осуществления изобретения используют ПТС для других соответствующих структур данных.
На фиг. 2 представлена концептуальная диаграмма структуры ПТС 200. После рассмотрения концептуальной модели ниже приведен пример ПТС. Как показано на фиг. 2, каждый ПТС определяет интерфейс общего пользования для манипулирования соответствующей структурой данных, такой как таблица кодировки символов или синтаксическое дерево. Как показано на фиг. 2, ПТС 200 структурирован во множество уровней абстрактных конструкций, которые включают выделенное конкретное представление 202, уровень представлений 204, уровень определений 206 и концептуальный уровень 208. Каждый из этих уровней абстрактных конструкций представлен горизонтальной строкой на фиг. 2.
Изобретение обеспечивает назначение группы интерфейсных подпрограмм для каждого уровня для выполнения операций создания/удаления 222, обращения 224, обновления 226 и вывода 228; каждая из упомянутых групп представлена столбцом на фиг .2. Интерфейсы конкретного представления 202 и уровня представлений 204 являются скрытыми для программиста. Интерфейс концептуального уровня 208 содержит множество программно-реализуемых процедур или функций, которые создают интерфейсы, посредством которых к ПТС может быть обеспечен доступ со стороны программных средств, внешних по отношению к ПТС. Предоставляемый интерфейс для доступа к ПТС может также включать часть уровня определений 206. В других случаях уровень определений 206 является скрытым. Упрощенный пример для пояснения сказанного приведен ниже.
Если, например, формируются ПТС для манипулирования с перечнем, его уровень определений может содержать следующие команды (атрибуты абстрактных конструкций) для каждого элемента перечня: INFO(L), представляющая информационную часть; KEY(L)- ключ для ассоциативного поиска; NEXT(L) - указатель для следующего элемента перечня. Атрибуты INFO и KEY могут быть включены в интерфейс ПТС. Но нет необходимости включать в интерфейс атрибут NEXT, так как на концептуальном (более высоком) уровне мы можем создать итератор ELEMENTS (L, P), который сканирует все элементы перечня. Таким образом, атрибут NEXT остается скрытым.
Таким образом, пример ПТС, показанный на фиг. 2, имеет четыре группы интерфейсов, верхний уровень которых доступен для программных средств, выполняющих операции над структурами данных, которым соответствуют ПТС, а нижние уровни используются внутренним для ПТС образом для обеспечения доступа между различными уровнями интерфейсов. Как показано стрелками на фиг. 2, интерфейс уровня N может быть доступен только на уровне N+1. Также возможно (но осуществляется редко) использовать для подпрограмм уровня N другие подпрограммы уровня N. Не все ПТС будут включать каждый из интерфейсов, показанных на фиг. 2, но если такие интерфейсы необходимы, то они должны быть согласованы с форматом, представленным на фиг. 2.
Выделенное конкретное представление 202 является реальной структурой данных, хранящейся в памяти, такой как синтаксическое дерево, таблица кодировки символов (таблица перечня имен - NL-таблица), таблица идентификаторов или структурой данных, представляющей обычную грамматику языка программирования. Действительное представление такой структуры данных не входит в объем настоящего изобретения; могут быть использованы любые соответствующие структуры данных. Уровень представлений 204 включает множество операций, например, создание/удаление 222, обращение 224, обновление 226 и вывод 228, определяющих доступ к атрибутам/элементам конкретного представления 202. Уровень определений 206 включает множество операций, например, создание/удаление 222, обращение 224, обновление 226 и вывод 228, определяющих доступ к атрибутам абстрактных конструкций на уровне представлений 204, которые могут соответствовать (или не соответствовать) конкретным атрибутам/элементам. "Атрибуты абстрактных конструкций" также называются "промежуточными абстрактными понятиями". Концептуальный уровень 208 включает более обобщенные операции (например, итераторы), которые манипулируют структурой данных как единым абстрактным объектом.
На фиг. 3 показан пример ПТС 134 для синтаксического дерева. ПТС 134 включает два файла: самодокументированный файл интерфейса (.h) 310 и файл реализации (. с) 320. Самодокументированный файл интерфейса 310 определяет внешние процедуры, функции и переменные и макрокоманды (такие, как для осуществления переходов между различными уровнями ПТС). (В предпочтительном варианте осуществления большинство интерфейсных процедур и функций определены как макрокоманды, потому что их реализация, т.е. конкретное представление абстрактного описания, относительно невелика). Файл реализаций 320 содержит тела (т.е. внутреннюю часть описания) процедур, функций и переменных.
Как показано на фиг. 3, синтаксическое дерево 134 включает интерфейс "создание/удаление" 302 для каждого уровня и интерфейс "обращение" 304 для каждого уровня. В описываемом варианте ПТС 134 синтаксического дерева не включает специальных определений для интерфейсов обновления или вывода. Интерфейс обновления для этого ПТС используется в форме назначений (присваиваний имен), левые части которых представляют собой вызовы макрокоманд обращения к интерфейсу, например:
TR_TYPE(t) = p;
Этот фрагмент обновляет атрибут TYPE в узле t синтаксического дерева. Интерфейс вывода для синтаксического дерева используется только для отладки и не вложен в большинство версий транслятора с целью избежать увеличения размера исполняемого кода. Другие ПТС, разумеется, могут включать некоторые или все из интерфейсов создания/удаления, обращения, обновления и вывода, причем каждый из этих интерфейсов включает интерфейсные подпрограммы для каждого из множества уровней ПТС.
Как показано на фиг. 3, интерфейс "создание/удаление" существует для каждого из следующих уровней: уровня представлений 310, уровня определений 312 и концептуального уровня 314. В описываемом варианте интерфейсы "создание/удаление" для уровня определений 312 и концептуального уровня 314 существенно идентичны. Аналогично, интерфейс "обращение" существует для каждого из следующих уровней: уровня представлений 320, уровня определений 322 и концептуального уровня 324. Заметим, что в описываемом варианте интерфейсы обращения как для уровня определений 312, так и для концептуального уровня 314 доступны для программных средств, внешних по отношению к ПТС 134. Если необходимо, некоторые отдельные подпрограммы уровня определений могут быть сделаны недоступными извне путем определения их как статические (STATIC).
Интерфейс "создание/удаление" для концептуального уровня может включать некоторые обобщенные операции, которые создают или удаляют абстрактный объект как целое. Для данного примера такие операции не являются необходимыми, поскольку имеется лишь одно синтаксическое дерево, которое создается неявно, как результат некоторых определений, и которое удаляется также в неявном виде. Если бы имелось несколько таких деревьев, то было бы необходимо определить операции на уровне абстрактных понятий по их созданию/удалению. Такие операции часто определяются понятиями "построение/разрушение".
Интерфейс "создание/удаление" для уровня определений включает множество определений, используемых для создания и удаления узлов синтаксического дерева. Имеется по существу неограниченное число определений, которые могут быть включены в уровень определений, вследствие чего практически невозможно обсудить их все. Некоторые примеры приведены ниже.
Например, процедура "tree_asgn" в ПТС 134 создает узел синтаксического дерева, который содержит информацию об операторах "присвоения" (например, узел для представления субдерева "V: = E"). Процедура tree_asgn вводит множество параметров, создает новый узел дерева (путем доступа к процедуре "создание" уровня "представление") и запоминает параметры во вновь созданном узле. В предпочтительном варианте различные узлы синтаксического дерева имеют различные структуры. Таким образом, каждый вид узла, который может содержаться в синтаксическом дереве, создается и ему присваивается значение с использованием одной из множества подпрограмм создания узлов в пределах уровня определений интерфейса "создание/удаление" для ПТС 134.
Интерфейс "создание/удаление" для уровня представлений ПТС 134 включает подпрограмму создания узла необходимой структуры и возврата указателя к вновь созданному узлу. Как обсуждено выше, эта подпрограмма вызывается посредством интерфейса "создание/удаление" уровня определений. В этом примере отсутствует подпрограмма уровня представлений, используемая для удалений. Подпрограмма tr_free() высвобождает память дерева для всего дерева, так что она может рассматриваться как пример специфического интерфейса удаления для концептуального уровня.
Таким образом, интерфейс "создание/удаление" ПТС 134 содержит множество уровней абстрактных конструкций, которые включают выделенное конкретное представление, уровень представлений, уровень определений и концептуальный уровень. Интерфейс "создания/удаления" для ПТС 134 состоит из концептуального уровня и части уровня определений. Конкретное представление и уровень представлений скрыты от программиста компьютерной системы.
Интерфейс "обращение" для концептуального уровня для ПТС 134 включает функцию итератора, которая обеспечивает доступ к элементам перечня в узле дерева. Это единственный интерфейс концептуального уровня в данном примере. Обращение к узлам дерева и их атрибутам выполняется посредством операций обращения на уровне определений.
Интерфейс "обращение" для уровня определений включает множество определений (например, макроопределений), используемых для обращения к синтаксическому дереву. По существу имеется неограниченное число определений, которые могут быть включены в уровень определений и поэтому практически невозможно обсудить их все. Некоторые примеры приведены ниже.
Интерфейс обращения для уровня определений может содержать, например, следующие макроопределения на языке программирования СИ:
#определить TR_А5С_ЬН5(1)/*левая часть узла назначения*/\
((t) - > tree_ele.t_asg_node. lhs_var )
#определить TR_VAR_ID( ^^идентификатор переменной*/\
((t)->tree_ele.t_var_node.cptr)
Используя эти определения ПТС 134, средства программного обеспечения могут обратиться к идентификатору (например, "V") левой части узла назначения синтаксического дерева (например, V=E) просто путем использования определенных интерфейсов TR_ASG_LHS и TR_VAR_ID, которые определены на уровне определений ПТС 134 синтаксического дерева следующим образом:
TR_VAR_ID ( TR_ASG_LHS ( Т ) )
Структура синтаксического дерева и обращения указателя являются скрытыми из-за ПТС 134.
В другом примере интерфейс обращения уровня определений для ПТС, соответствующего таблице перечня имен (в ПТС для таблицы перечня имен), может содержать следующие макроопределения на языке программирования СИ:
#определить NL_CLOBAL(пр)/*проверка, если переменная является глобальной*/\
((((np)->extra_flags) & NGLOBAL)!=0)
определить NL_ STATIC(np)/*проверка, если переменная является статической*/\
((((np)->extra_flags) & NSTATIC)!=0)
Используя эти определения ПТС для таблицы перечня имен (таблицы кодировки символов), средства программного обеспечения могут проверить статус переменных в таблице перечня имен для определения их статуса просто с использованием определенных интерфейсов NL_GLOBAL и NL_STATIC следующим образом:
если ( NL_GLOBAL (np) альфа NL_STATIC(np))
Обращения указателя и поразрядные логические операции И скрыты в ПТС для таблицы перечня имен.
Подпрограммы обращения уровня представлений для ПТС 134 включают, например, подпрограмму (tr_alloc(n)) для выделения узла дерева из n байт.
Таким образом, интерфейс обращения ПТС 134 содержит множество уровней абстрактных конструкций, которые включают выделенное конкретное представление, уровень представлений, уровень определений и концептуальный уровень. Интерфейс доступа общего пользования к ПТС 134 состоит из концептуального уровня и части уровня определений. Конкретное представление и уровень представлений являются скрытыми для программиста компьютерной системы.
В заключение можно отметить, что с использованием настоящего изобретения программные средства можно структурировать согласно строгому порядку, что обеспечивает удобочитаемость, надежность и удобство сопровождения программных средств. При использовании настоящего изобретения сопровождающиеся высоким риском фрагменты, использующие указатели, метки, косвенную адресацию и т. п. , записываются только однократно в соответствующем ПТС на уровне определений. Каждый тип интерфейса ПТС (например, интерфейсы создания/удаления, обращения, обновления и вывода) содержит множество уровней абстрактных конструкций, которые включают выделенное конкретное представление, уровень представлений, уровень определений и концептуальный уровень. Каждый интерфейс для ПТС состоит из концептуального уровня и, возможно, части уровня определений. Конкретное представление и уровень представлений являются скрытыми для программиста.
Другие варианты осуществления настоящего изобретения могут быть очевидны для специалиста в данной области техники, исходя из описания изобретения. Например, другие варианты осуществления изобретения могут использовать другие наименования уровней и интерфейсов, описанных здесь.
Специалисту в данной области техники должно быть ясно, что технология с использованием ПТС характеризует собой методологию и принципы структурирования при составлении программ для средств программного обеспечения. Таким образом, эта технология с использованием ПТС обеспечивает достижение наилучших результатов, если соответствующие уровни и интерфейсы скрупулезно определены и поддерживаются. Следует иметь в виду, однако, что частичное использование технологии ПТС также обеспечит получение преимуществ в аспекте удобочитаемости и удобства сопровождения, хотя и не в такой степени, как при строгом соблюдении правил использования технологии ПТС. Таким образом, использование ПТС не является фактором, который должен использоваться либо полностью, либо не использоваться совсем. Можно осуществлять составление программ для компьютерных систем, в которых технология ПТС будет использоваться лишь в некоторых частях, а в других будет отсутствовать.
Следует иметь в виду также, что описание и приведенные варианты выполнения не накладывают никаких ограничений и должны рассматриваться как возможные примеры, в то время как действительный объем изобретения должен определяться пунктами формулы изобретения.
Предложены способ и устройство для использования иерархической структуры пакетов технологических средств (ПТС), каждый из которых определяет интерфейс для манипулирования соответствующей структурой данных, такой как структура данных таблицы кодировки символов или синтаксического дерева. Изобретение предусматривает структурирование ПТС во множество уровней абстрактных конструкций, в числе которых выделенное конкретное представление, уровень представлений, уровень определений и концептуальный уровень. Интерфейс к ПТС состоит, например, из концептуального уровня и части уровня определений. Конкретное представление и уровень представлений скрыты от программиста компьютерной системы. Кроме того, изобретение обеспечивает назначение интерфейса для каждого уровня для выполнения операций создания/удаления, обращения, обновления и вывода. 3 с. и 8 з.п. ф-лы, 4 ил.
ЕР, 0372834, патент, кл | |||
Приспособление для точного наложения листов бумаги при снятии оттисков | 1922 |
|
SU6A1 |
Авторы
Даты
1998-01-27—Публикация
1995-10-24—Подача