Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
skill / Лбы skill / Лабораторная работа N1.doc
Скачиваний:
51
Добавлен:
05.06.2015
Размер:
166.91 Кб
Скачать

Данные пользователя

Вы можете добавить собственные внутренние функции к базе данных скопировав ваши данные в директорию с данными Cadence. Имя вашей поддиректории будет доступно для выбора в полеSearchingокнаFinderс пробелами вместо подчеркиваний, использованных в названии. После имени поддиректории появится словоOnly.

Например, если вы добавили ваши функции по следующему пути:

your_install_dir/local/finder/SKILL/Your_APIs/your.fnd

в поле SearchingокнаFinderпоявится следующая строка:

YourAPIsOnly

Переменная окружения для установления дополнительных директорий с данными в Finder

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

your_install_dir/doc/finder/language/functionArea/*.fnd

он подгружает данные из списка, разделенного двоеточиями (:), который вы можете задать через терминал с помощью этой переменной:

setenv CDS_FINDER_PATH /home/myFinder/db:/home/myProud/myHoneyFunctions

Работа с документами Cadence по языку SKILL.

Название секций и их назначение

Каждая функция языка SKILLможет иметь до семи секций. Каждая секция необязательно является необходимой для описания конкретной функции.

  • Syntax

Синтаксис описываемой функции.

  • Prerequisites

Действия, которые необходимо предпринять перед вызовом описываемой функции.

  • Description

Краткое описание назначения описываемой функции. Текстовое описание действия, выполняемого функцией.

  • Arguments

Описание входных аргументов функции.

  • Valuereturned

Описание возвращаемого функцией значения.

  • Example

Пример кода SKILL, использующего данную функцию.

  • References

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

Синтаксис документации CadenceпоSKILL.

literal(LITERAL)

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

argument (z_argument)

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

| Вертикальные скобки разделяют набор возможных для выбора элементов для одного аргумента; они имеют преимущество перед любым другим символом.

[ ] Квадратные скобки содержат необязательные аргументы; могут использоваться с вертикальными скобками – в этом случае они заключают в себе список возможных для выбора необязательных элементов. Вы можете выбрать один элемент из списка.

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

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

argument... ;можно использовать только один аргумент,

[argument]... ;можно использовать неограниченное число

;аргументов

,... Запятая и многоточие означают, что вы можете применить более одного аргумента, но аргументы должны быть разделены запятыми.

=> Правая стрелка указывает на возвращаемые функцией значения. Список возвращаемых значений показан прямым шрифтом. Буквенные возвращаемые значения (например, tиnil) показаны тонким прямым шрифтом. Правая стрелка также используется в примерах кодаSKILL.

/ Косая черта разделяет возможные значения, возвращаемые SKILLфункцией.

Типы данных SKILL

Префикс Внутреннее название Тип

a array матрица

b ddUserType булев

C opfcontext OPF context

d dbobject Объект базы данных Cadence

(CDBA)

e envobjокружения

f flonumчисло с плавающей точкой

F opffile OPF file ID

g general любой тип

G gdmSpecIlUserType gdm spec

h hdbobject объект конфигурации

иерархической базы данных

l listсвязный список

m nmpIlUserType nmpIl user type

M cdsEvalObject —

n numberцелое число или число с

плавающей точкой

o userTypeтип, определяемый

пользователем

p portI/Oпорт

q gdmspecListIlUserType gdm spec list

r defstruct defstruct

R rodObj объект ROD

s symbol символ

S stringSymbolсимвол или строка

символов

t stringстрока символов (текст)

u functionобъект функции, в т. ч.

имя функции (символ)

U funobjобъект функции

v hdbpath —

w wtype тип окна

x integerцелое число

y binaryдвоичная функция

& pointerтип указателя

Примеры синтаксиса SKILL в документации

Следующие примеры показывают применяемый в документации синтаксис для описания SKILLкода.

Пример 1

list( g_arg1 [ g_arg2 ] ...) l_result

Этот пример иллюстрирует применение следующего синтаксиса:

listПростым прямым шрифтом написаны ключевые слова, непосредственно используемые в коде.

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

( ) Круглые скобки отделяют имена функций от их аргументов.

_ Подчеркивание отделяет тип аргумента (слева) от имени аргумента (справа).

[ ] Квадратные скобки содержат элементы, необязательные для применения.

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

=> Правая стрелка указывает на описание возвращаемого функцией значения.

l_result Все функцииSKILLвозвращают некоторое информационное значение.

Пример 2

needNCells( s_cellType | st_userType x_cellCount ) t / nil

В этом примере также используются два других синтаксических символа:

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

/ Косая черта разделяет возможные возвращаемые функцией значения.

Работа с SKILL list

SKILLlist– это упорядоченный набор объектов данныхSKILL. Структура данныхlistявляется основной вSKILLи может быть использована в самых различных ситуациях.

Элементы, входящие в list, могут быть любого типа данных, а также могут быть переменными или другими листами.Listможет включать в себя набор элементов или быть пустым. Пустойlistобозначается пустыми скобками “( )” или специальным словомnil. В любом случаеlistдолжен быть заключен в скобки.Listможет содержать несколько элементов типаlistдля формирования структур данных любой сложности. Приведем несколько примеров:

_____________________________________________________________________

List Explanation

_____________________________________________________________________

(1 2 3) Лист включает в себя целые числа 1, 2 и 3

(1) Listвключает в себя единственный элемент - 1

( ) Пустой list(также может обозначаться словомnil)

(1 (2 3) 4) Вторым элементом listявляется другойlist

_____________________________________________________________________

SKILLвыводитlistна экран в виде набора элементовlist, окруженного круглыми скобками. В следующем примереlistхранится переменной shapeTypeList, затем показано возвращаемое значение переменной.

shapeTypeList = '( "rect" "polygon" "rect" "line" )

shapeTypeList => ( "rect" "polygon" "rect" "line" )

SKILLобладает широким набором функций для создания и управленияlist. Многие функцииSKILLв качестве возвращаемого значения имеютlist.SKILLможет использовать несколько строк терминала для выводаlist. глобальная переменнаяSKILL_itemsperline хранит соответствующее целое значение.

Составление списков (list)

Существует несколько основных способов составления списков:

  • Задание элементов списка поименно с помощью оператора (').

  • Задание элементов списка указанием количества аргументов функции list.

  • Добавление элемента в существующий список с помощью функции cons.

  • Слияние двух списков с помощью функции append.

Функции consиappendсоздают новый список и возвращают его. Возвращаемый результат должен быть сохранен в переменной, иначе с ним нельзя будет работать. Следующие функции позволяют составлять списки и работать с ними различными способами.

Составление списка из заданных элементов

Список создается с помощью оператора (') путем перечисления элементов списка. Значения переменных aиbне важны. Функцияlistберет текущие значения переменных для включения в список.

'( 1 2 3 ) => ( 1 2 3 )

a= 1 => 1

b= 2 => 2

list(ab3 ) => ( 1 2 3 )

Добавление элемента в начало списка (cons)

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

result = '( 2 3 ) => ( 2 3 )

result = cons( 1 result ) => ( 1 2 3 )

Слияние двух списков (append)

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

oneList = '( 4 5 6 ) => ( 4 5 6 )

aList = '( 1 2 3 ) => ( 1 2 3 )

bList = append( oneList aList) => ( 4 5 6 1 2 3 )

Доступ к спискам

Извлечение первого элемента списка (car)

Функция carвозвращает первый элемент списка.

numbers= '( 1 2 3 ) => ( 1 2 3 )

car(numbers) => 1

Извлечение остатка списка (cdr)

Функция cdrвозвращает список без первого элемента.

numbers= '( 1 2 3 ) => ( 1 2 3 )

cdr(numbers) => ( 2 3 )

Извлечение n-го элемента списка

Функция nthвозвращаетn– ый элемент списка. Приn= 0 функция как иcarвозвращает первый элемент.

numbers= '( 1 2 3 ) => ( 1 2 3 )

nth( 1numbers) => 2

Определение, является ли объект данных элементом списка (member)

Функция memberне способна проверить все уровни иерархического списка, она работает только с верхним уровнем элементов. Функция возвращает список элементов начиная с искомого или пустой список, если заданного элемента нет.

numbers = '( 1 2 3 ) => ( 1 2 3 )

member( 4 numbers ) => nil

member( 2 numbers ) => ( 2 3 )

Определение количества элементов в списке (length)

Функция lengthопределяет количество элементов в списке, матрице, ассоциированной таблице.

numbers= '( 1 2 3 ) => ( 1 2 3 )

length(numbers) => 3

Преобразование списков

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

Координаты

Координаты xyобозначаются списком из двух элементов. Оператор двоеточие (:) отделяет значениеx(первое) отy(второе).

xValue = 300

yValue = 400

aCoordinate = xValue:yValue => ( 300 400 )

Функции xCoordиyCoordобеспечивают доступ к координатеxи координатеyсоответственно.

xCoord( aCoordinate ) => 300

yCoord( aCoordinate ) => 400

  • Можно использовать оператор (‘) или функцию list для создания списка координат.

  • Можно использовать функцию carдля доступа к координатеxи функциюcar(cdr( … ) ) для доступа к координатеy.

Прямоугольная рабочая область (bounding box)

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

  • Координат, определяемых оператором двоеточие (:).

bBox=list( 300:400 500:450 )

  • Координат, заданных переменными.

lowerLeft = 300:400

upperRight = 500:450

bBox = list( lowerLeft upperRight )

Если координаты задаются листом значений, то для создания прямоугольной рабочей области можно использовать оператор (').

bBox= '(( 300 400 ) ( 500 450 ))

Прямоугольная рабочая область может послужить хорошим примером работы с функциями carиcdr. Для удобства работы используйте произвольные комбинации с четырьмяa (количествоaсоответствует количеству запусков функцииcar) илиd(количествоdсоответствует количеству запусков функцииcdr).

Использование функций car и cdr при работе с прямоугольной рабочей областью

______________________________________________________________________

Функции Значение Пример Выражение

______________________________________________________________________

carcar( ... ) левый нижний уголll=car(bBox)

cadrcar(cdr( ... ) ) правый верхний уголur=cadr(bBox)

caarcar(car( ... ) )x-координата левого

нижнего угла llx=caar(bBox)

cadar car( cdr( car( ... ) ) ) y-координата левого

нижнего угла lly = cadar( bBox)

caadr car( car( cdr( ... ) ) ) x-координата верхнего

правого угла urx = caadr( bBox)

cadadr car( cdr( car( cdr( ...] y-координата верхнего

правого угла ury=cadadr(bBox)

______________________________________________________________________

Соседние файлы в папке Лбы skill