Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Структура языка и его синтаксис



Язык SKILL

 

 

Структура языка и его синтаксис

Четкой структуры программы не существует. Переменные задаются в процессе проектирования (написания программы). Имя переменной не может начинаться с числа. Регистр важен. Несколько выражений можно писать через пробел.

Обычно принят, но не обязателен следующий синтаксис:

Procedure(< name>(  )

)

Специальные символы и операторы

SKILL использует многие арифметические операторы:

 

**              - возведение в степень;

*                - умножение;

/                 - деление;

+                - сложение(плюс);

-                 - вычитание(минус);

++а            - инкремент;

--а              - декремент;

==              - сравнение (равно);

!=                - неравно

=                - присваивание;

 

 

В следующей таблице приведен список специальных символов и их значений в SKILL.

 

Замечание: Всем символам, не являющимся буквами цифрами и  ( _ или ?) , которые используются в имени переменных(функций) должен предшествовать, символ обратной косой черты (\).

 

Специальные символы SKILL

Символ   Имя Значение
\ Обратная косая черта «Экранирование» для специальных символов
( ) Круглые скобки Группирует список элементов (тип list), вызов функции
[ ] Квадратные скобки  (номера элементов массива, только правая скобка закрывает все не закрытые скобки)  
Одиночные кавычки Предотвращение интерпретации выражения a=5 b=a => b=5; b=’a => b=a
Двойные кавычки Используется для задания типа строка.
, Запятая Необязательный разделитель элементов списка
; Точка с запятой Однострочный комментарий  
+, –, *, / Арифметическая Для арифметических операций ; /* и */ также объединяют комментарии и определения  
!,^,&,| Логическая Для логического оператора  
<,>,= Сравнения   Для сравнения и присвоения  
? Знак вопроса Если является первым символом, то определяет ключевое  
% Проценты Используется для характеристики чисел

 

Пример:

If(( (    ] ; результат – все скобки закрыты

 

Пробел

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

 Например,

f( a b c) и g() правильное название , но f ( a b c) и g () неверно.

Также минус должен непосредственно предшествовать (без пробела) тому оператору, которому он принадлежит.

Например,

-1, - a, и -( a* b) правильная конструкция, но - 1, - a, и - ( a* b) неверно.

Двойной минус (оператор вычитания) должен быть с обеих сторон окружен пробелами, либо пробелов ни там, ни там вообще быть не должно. Для избежания неясности один из методов должен быть использован постоянно.

Например,

a - b и a- b правильная конструкция для двойного минуса, но a - b неверно.

 

Комментарии

SKILL допускает два типа комментариев. Один стиль – блочно-ориентированный, где для разделения используются знаки /* и */.

 Например:

/* This s a bloc of comments

comment line2

comment line3 etc.

*/

Второй стиль – линейно ориентирован. Точка с запятой (;) указывает, что вся информация до конца строки, после нее является комментарием.

 

Например,

x = 1     ; comment

              ;comment line1

Как более простой, рекомендуется линейно – ориентированный стиль.



Типы данных

Skill поддерживает различные типы данных.

 

array          ó a (одномерный массив, двумерный получается комбинированием);

dbobject    ó d (объект базы данных);

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

list             ó l (связанный список);

integer       ó x (целое число);

symbol      ó s(символ);

stringSymbol ó S(символ или строка символов);

windowtype ó w(тип окна).

 

Масштабные коэффициенты

Символ Название Множитель   Пример
M Mega 106 10M [ 10,000,000 ]  
K Kilo 103 10K [ 10,000 ]  
% percent 10-2 5% [ 0.05 ]  
m milli 10-3 5m [ 5.0e-3 ]  
u micro 10-6 1.2u [ 1.2e-6 ]  
n nano 10-9 1.2n [ 1.2e-9  
p pico 10-12 1.2p [ 1.2e-12 ]  
f femto 10-15 1.2f [ 1.2e-15 ]  

 

Тип данных Atom

Atom – все объекты SKILL, кроме непустых листов. nil является одновременно и типом atom, и типом list.

Другими словами это все скалярные типы данных. Но есть несколько основных

nil – не верно (для логических операций) или пустой лист

t – верно (для логических операций)

unbound – переменная не была заданна

Нельзя пользоваться этими обозначениями для имен переменных.

 

Тип данных строка

Строка это последовательность символов, заключенных в двойные кавычки. Например: “acd” “123”

Тип данных List

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

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

Задание List может осуществляться двумя способами:

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

a = list(1 2 3)

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

a = ‘(1 2 3)

List может состоять из символов, быть пустым, или содержать другие списки.

Примеры:

a = ‘(1 a 3)

a = ‘(   )

a = ‘(‘(1 2)’(3 4))

Функции работы с list

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

append( list1 list2)-объединяет два списка.

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

 

Пример:

append( ‘(1 2) ‘(3 4))

=>’(1 2 3 4)

a=’(1 2)

b=’(3 4)

append(a b)

=>’(1 2 3 4)

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

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

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

 

append1( list arg )-добавляет новый элемент в конец списка.

 

Пример:

append1( ‘(1 2 3) 4))

=>’(1 2 3 4)

car( list )- возвращает первый элемент списка. Сам список остается прежним.

Пример:

b = ‘(1 2 3)

a= car(b) => (1)

a              =>(1)

z = ‘(1 2 3) =>(1 2 3)

y = car(z) => 1

y              =>1

z              =>(1 2 3)

car(nil)    => nil

cdr( list )-возвращает все элементы списка кроме первого(возвращает лист).

Пример:

cdr ( '(a b c) ) => (b c)

z = '(1 2 3)

cdr ( z ) => (2 3)

Функции cdr car можно использовать вложенным способом

 

Пример:

caaar ('(((1 2 3)(4 5 6))(7 8 9))) => 1

caaar - car( car( car( l_list))).

caadr ('(((1 2 3)(4 5 6))(7 8 9))) => 7

car( car( cdr( l_list))).

caar ('(((1 2 3)(4 5 6))(7 8 9))) => (1 2 3)

car( car( l_list)).

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

cadr ( z ) => 2

nth( x _ index 0 l _ list )      – возвращает n-ый элемент списка. Возвращает nil если x _ index 0 отрицательный, больше или равен числу элементов списка. Нумерация начинается с нуля.  При n = 0 функция как и car возвращает первый элемент.

 

Пример:

nth ( 1 '( a b c ) ) => b

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

nth (2 z ) => 3

nth (3 z ) => nil

nthelem( x _ index 1 l _ list )- возвращает n-ый элемент списка. Возвращает nil если x _ index 1 меньше или равен 0 и больше чем число элементов списка. Нумерация начинается с единицы.  При n = 1 функция как и car возвращает первый элемент.

 

Пример:

nthelm ( 1 ‘(a b c)) =>a

z = ‘(1 2 3)

nthelem (2 z)       =>2

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

Пример:

cons(1 nil)                       => (1)

cons(‘a ‘(b c))                 => (a b c)

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

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

Следующий пример показывает как быстро можно создать список от 100 до 1.

x=nil

for( i 1 100 x = cons(i x)) => t

x                                       => (100 99 98 . . 2 1)

Можно сделать

x = reverse( x) =>(1 2 3 …100)

nthcdr( x _ count l _ list ) применяет команду cdr к данному списку заданное количество раз.

 

Пример:

nthcdr ( 3 ‘(a b c d)) =>(d)

z = ‘(1 2 3)

nthcdr (2 z)             =>(3)

nthcdr (-1 z)            =>(nil 1 2 3)

Если x _ count меньше 0, то возвращается результат выполнения cons ( nil l _ list )

tconc( l_ ptr g_ x) добавление элемента в конец списка.

для создания новой tconc структуры(списка) l_ptr должна быть определена как nil.

g_x элемент добавляемый в конец списка. В результате выполнения этой функции мы получаем список l_ptr с добавленным в конец элементом.

 

Пример:

x = tconc ( nil 1) => x ((1) 1)

tconc ( x 2 )    =>x ((1 2) 2)

tconc ( x 3 )    =>x ((1 2 3) 3)

x = car( x )     =>x (1 2 3)

lconc( l_ tconc l_ list ) добавление списка к другому списку

l_ tconc структура(лист), созданная с помощью команды tconc.

l_ list список, добавляемый в конец структуры l_tconc. В результате выполнения этой функции мы получаем список l_tconc с добавленным в конец списком.

 

Пример:

x = tconc(nil 1) => x ((1) 1)

lconc ( x ‘(2 3 4)) => x ((1 2 3 4) 4)

lconc ( x ‘(5)) => x ((1 2 3 4 5) 5)

x = car( x )   => x (1 2 3 4 5)

nconc( l_arg1 l_arg2 [l_arg3…] ) объединение нескольких списков

 

Пример:

x = ‘( a b c)

nconc ( x ‘(d)) => x (a b c d)

nconc ( x ‘(e f g)) => x (a b c d e f g)

данная функция быстрее чем append? Но медленнее чем tconc и lconc. Данная функция использует меньше памяти.

length( lao _ arg ) – возвращает количество элементов списка или массива.

 

Пример:

length( ‘(a b c d)) =>4

z = ‘(1 2 3)

length( z )              =>3

Лекция 2.

Операторы доступа в SKILL

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

Оператор “стрелка” (->)

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

 

Оператор “волнистая стрелка” (~>)

Этот оператор является обобщением обычной стрелки. Кроме доступа непосредственно к объекту с помощью этого оператора также можно осуществить доступ к списку подобных объектов. В этом случае оператор «стрелка» будет применён к каждому элементу списка.

 

Символы ( Symbol)

В SKILL символы играют ту же роль, что и переменные в С. Часто термины “символ” и “переменная” подменяют друг друга; при этом символы в SKILL могут быть использованы и для других целей. Каждый символ обладает следующими составляющими:

§ имя

§ значение

§ функциональное выражение

§ список свойств.

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

 

Значение символа

Значение символа может быть любого типа, включая тип символ.

 

Придание символу значения

Чтобы придать символу значение используйте оператор (=).

Пример

x = 5 => 5

Получение значения символа

Для получения значения символа необходимо сослаться на его имя.

x=> 5

 

Строки( String)

Строка – это некоторый набор символов.

a = “ a b c”

Условные операторы .

if( g_condition g_thenExpression [ g_elseExpression ] ) => g_result

 

if( g_condition then g_thenExpr1 ... [ else g_elseExpr1 ... ] ) => g_result

 

Пример:

x = 2

if( (x > 5) 1 0)

=> 0                ; Returns 0 because x is less than 5.

x = 7

if( (x > 5) then 1 else 0)

=> 1                 ; Returns 1 because x is greater than 5.

if( (x > 5)

then println("x is greater than 5")

   x + 1

else print("x is less ")

   x - 1)

 

x is greater than 5  ; Printed if x was 7.

=> 8                 ; Returned 8 if x was 7.

 

when( g_condition g_expr1 ... ) => g_result | nil

Пример:

x = -123

when( x < 0

println("x is negative")

-x)

=> 123       ;Prints "x is negative" as side effect.

 

when( x >= 0

println("x is positive")

x)

=> nil

Функция case предлагает выполнение различных выражений при различных условиях:

case( g_selectionExpr l_clause1 [ l_clause2 ... ] ) => g_ result | nil

caseq быстрее чем case, синтаксис одинаковый.

 

Пример:

nameofmonth = "February"

 

month = case( nameofmonth

           ("January" 1)

           ("February" 2)

           (t 'Other))

=> 2

Операторы цикла .

for( s_loopVar x_initialValue x_finalValue g_expr1 [ g_expr2 ... ] ) => t

Пример:

sum = 0

for( i 1 10

sum = sum + i

printf("%d\n" sum))

ð t     

foreach( s_formalVar g_exprList g_expr1 [ g_expr2 ... ] ) => l_ valueList / l_ result

используется для списков.

 

Пример:

foreach ( x '(1 2 3 4) println(x))

 

1              ; Prints the numbers 1 through 4.

2

3

4

ð (1 2 3 4)

Порты .

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

Предопределенные порты

Большинство функций ввода/вывода в языке Skill принимают порт в качестве необязательного аргумента. Если порт не указан, по умолчанию используются порты piport и poport в качестве входного и выходного портов соответственно. В таблице ниже находится список и назначение предопределённых портов. Данные порты все время открыты системой, поэтому их не надо открывать или закрывать.

имя применение
piport Стандартный порт ввода, аналог stdin в C
poport Стандартный порт вывода, аналог stdout в C
errport Выходной порт для вывода сообщений об ошибках, аналог stderr в С
ptport Выходной порт для вывода сообщений об ошибках, аналог stderr в С
woport Выходной порт для вывода предупреждений, аналог stdout в С

 

Вывод данных.

Skill предусматривает функции для форматированного и неформатированного вывода.

 

Неформатированный вывод.

 

print( g_ value [ p_ outputPort ] ) => nil

Печатает объекты SKILL , используя формат по умолчанию для типов данных значений (вычислений). Например, строка символов заключается в двойные кавычки.

g_ value - любой объект SKILL

p_ outputPort - порт выхода для печати. По умолчанию - poport

Всегда возвращает nil после того, как объект напечатан.

 

Пример:

print ("hello")

"hello"

ð nil

println(g_value [ p_outputPort ] ) => nil

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

g_ value - любой объект SKILL

p_ outputPort - порт выхода для печати. По умолчанию - poport

Всегда возвращает nil после того, как объект напечатан.

 

Пример:

for( i 1 3 println( "hello" ))

"hello"

"hello"

"hello"

 

Форматированный вывод.

Вы можете предопределить формат вывода с помощью соответствующего поля спецификации. Например, %5d означает, что будет напечатано целое число, которое имеет ширину 5 позиций. Если число начинается с 0, то те позиции которые не заняты заполняются 0 вместо пробелов.

Форматы вывода:

Обозначение формата Тип аргумента Печать(prints)
%d С фиксированной точкой Десятичное число
%o С фиксированной точкой Восьмеричное число
%x С фиксированной точкой Шестнадцатеричное число
%f С плавающей точкой Формат [-]ddd.ddd
%e С плавающей точкой Формат [-]d.ddde[-]ddd
%g С плавающей точкой Число вида f или e, которое дает максимальную точность и занимает минимальное количество позиций
%s Строка, символ Строка без кавычек или печатное имя символа
%c Строка, символ один символ
%n С фиксированной точкой, С плавающей точкой число
%L список Тип данных по умолчанию

 

printf( t_formatString [ g_arg1 ... ] )  => t

Форматированный вывод в poport.

 

Пример:

x = 197.9687 => 197.9687

printf ("The test measures %10.2f.\n" x)

The test measures       197.97

sprintf( {s_Var | nil } t_formatString [ g_arg1 ... ] ) => t_ string

Форматированный вывод в строку.

 

Пример:

sprintf (s "Memorize %s number %d!" "transaction" 5)

=> "Memorize transaction number 5!"

 

s

=> "Memorize transaction number 5!"

 

p = outfile(sprintf(nil "test%d.out" 10))

=> port:"test10.out"

Ввод.

evalstring( t_string [ s_langMode ] ) => g_value | nil

Читает и вычисляет выражения, сохраненные в строке символов.

t_ string- строка, содержащая Skill выражение, которое необходимо вычислить

s_ langMode - данный аргумент должет быть типа символ. Доступные значения:

‘ils вычисляет строку в Skill++

‘il вычисляет строку в Skill, данное значение установлено по умолчанию

Возвращает вычисленное значение или nil если строка не прочитана.

 

Пример:

evalstring ("1+2") => 3

The 1+2 infix notation is the same as (plus 1 2).

evalstring ("cons('a '(b c))") => (a b c)

car '(1 2 3)            => 1

load( t_fileName [ t_password ] ) => t

Открывает файл, неоднократно вызывает функцию lineread для чтения в файл. Сразу же после прочтения вычисляет каждую форму. Использует расширение файла для определения модели языка (.il для SKILL и .ils для SKILL).

Закрывает файл, когда достигнут конец файла. Если не обнаружены ошибки, файл читается спокойно. Если  load прервана нажатием клавиши Control- c, функция пропускает остаток загруженного файла.

t_ fileName – имя файла, который необходимо загрузить

t_ password – пароль, если файл зашифрованный

Возвращает t, если файл загружен успешно.

 

Пример:

load( "testfns.il")

loadi( t_fileName [ t_password ] ) => t

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

Во всем остальном loadi подобна функции load.

 

Базы данных

Все средства Cadence используют унифицированную базу данных DFII, это двоичная база данных, которая хранит данные, как объекты. Существует большое количество типов объектов, например:

· rectangle;

· terminal;

· instance;

· cellview и др.

База данных DFII хранит как физическую, так и логическую информацию о проекте. Физическая информация, хранящаяся в объектах, - геометрические формы и IC топология. Логическая информация – цепи и схемы, которые могут существовать без соответствующей физической реализации.

Для доступа к объекту необходимо использовать метку – идентификатор объекта, его ID. Каждый ID однозначно определяет объект базы данных и представлен специальным типом dbObject. Только внутренние программы базы данных могут создавать ID, и пользователь не может изменять их напрямую. Когда вы используете функцию, которая работает с объектами баз данных, необходимо указывать ID в качестве аргумента.

Различные типы и классы объектов формируют иерархию классов. Когда количество отдельных типов объектов, использующих общие атрибуты, превышает некоторое число, создается класс объектов. Например, геометрические фигуры имеют атрибуты layer, purpose, bounding box.

 

Атрибуты объектов

Каждый тип объектов имеет набор атрибутов, которые можно узнать, используя специальные для данного типа функции доступа. Существует три типа атрибутов:

· обязательные – должны быть заданы во время создания объекта. Большинство атрибутов относится к этому типу.

· необязательные – не являются обязательными для объекта. Данные атрибуты не нужно задавать во время создания объекта. Они могут быть добавлены в любое время.

· вторичные – получаются из других атрибутов объекта. Вторичные атрибуты доступны пользователю только для чтения. Эти атрибуты играют большую роль в ускорении процесса расчетов.

 

Свойства объектов

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

 

DbOpenCellViewByType

Эта функция открывает Cellview для чтения, записи, дозаписи. Если Cellview открывается для чтения, то она должна существовать. Для всех остальных режимов, если Cellview не существует, то она создается автоматически.

 

dbOpenCellViewByType (

( gt _ lib | ni ) l               ; определяет ddId библиотеки, имя библиотеки t_ lib или nil.

t_ cellName                  ; определяет имя cellview.

lt _ viewName                ; определяет имена view.

[ t_ viewTypeName [ t_ mode [ d_ contextCellView ]] ; определяется тип view, t_mode определяет доступ к cellview и может принимать следующие значения:

; r   Открывает cellview только для чтения. Cellview должна существовать.

; а Открывает cellview в режиме дозаписи.

; w Режим записи.

; s Открытие во временном режиме. Cellview нельзя сохранить на диск.

; и др.

)

=> d_ cellView / nil

Пример:

Открыть ячейку “ cellA ” view “ layout” в режиме для чтения, если она существует в библиотеке “ test”.

cellview = dbOpenCellViewByType( “test” “cellA” “layout” )

Открыть ее в режиме дозаписи. Создать, если такой не существует:

cellview = dbOpenCellViewByType(“test” “cellA” “layout” “maskLayout” “a” )

Открыть ее в режиме дозаписи только в случае, если она существует:

cellview = dbOpenCellViewByType(“test” “cellA” “layout” “ ” “a” )

DbFindOpendCellView

Эта функция находит открытую cellview.

 

dbFindOpenCellView (

g_ libId                  ; определяет ddId библиотеки.

t_ cellName                  ; определяет имя cellview.

t_ viewName                ; определяет имена view.

t_ version                   ; аргумент введен для совместимости различных версий, если задан, должен быть nil.

)

=>d_cellViewId / nil

Пример :

с v = dbFindOpenedCellView( lib “abc” “schematic” )

Находит view “schematic” ячейки “abc” библиотеки “lib”.

dbFindAnyInstByName(

d_cellView

t_name

)

=> d_ inst / nil

Находит instance или группу instance (mosaic) с одним именем. Использование этой функции более эффективно, чем поиск в списке из всех instance.

Пример:

dbFindAnyInstByName (inCellView "inst1")

dbFindAnyInstByName (inCellView "myInv<0:1>")

 

dbFindProp(

d_object

t_name

)

ð d_propId / nil

dbGetPropByName(

 d_object

t_name

 )

=> d_propId / nil

Эти две функции выполняют одно и тоже. Находят свойство по заданному имени и возвращают его Id.

Пример:

propId = dbFindProp(instId "myProp")

propId = dbGetPropByName(instId "myProp")

Оператор ~>? возвращает список всех доступных атрибутов для dbObject.

d_object ~>? => l_attributeNames

<1> cv = dbOpenCellViewByType(nil "inv" "symbol")

; open a cellview

db:2066752

 <2> prop = car(cv~>prop) ; ; get the first property

db:2068776

 <3> prop~>?         ;; fetch the attribute names

(cellview objType prop enum name object range value valueType)

Оператор ~>?? возвращает список всех доступных атрибутов и их значений как property list для dbObject.

d_object ~>?? => l_attributeValuePairs

<4> prop~>??

(db:2068776 cellview db:2066752 objType "prop"

prop nil enum nil name "lastSchematicExtraction"

object db:2066788 range nil

value "May 20 19:41:08 1991" valueType "time")

Доступ к значению свойства: prop_ name-> value

dbSave

Эта функция используется для сохранения измененной cellview.

 

dbSave(

d_cellView

d_destCellView

)

=> t / nil

dbSave(

d_cellView

t_libName

t_cellName

t_ viewName

)

=> t / nil

d_ cellView               Cellview, которая должна быть сохранена.

d_ destCellView         Определяет cellview, в которую сохранить информацию.

t_ cellName                Определяет имя ячейки.

lt _ viewName             Оределяет имена view.

t_ version           аргумент введен для совместимости различных версий, если задан, должен быть nil.

 

Пример:

Сохранить поверх существующей:

dbSave ( cellview )

Сохранить в указанную библиотеку:

destCV = dbOpenCellViewByType ( lib “ cellName ” “ schematic” “ schematic” “ w” )

dbSave ( cellview destCV )

Сохранить в cellview другой библиотеки:

dbSave ( cellView “libName” “cellName” “viewName” )

DbClose

Эта функция используется для закрытия cellview:

 

dbClose(

d_ cellView              ; определяет cellview, которую следует закрыть.

)

=> t / nil

Пример:

Сохранить изменения и закрыть cellview :

dbSave ( cellview )

dbClose ( cellview )

Язык SKILL

 

 

Структура языка и его синтаксис

Четкой структуры программы не существует. Переменные задаются в процессе проектирования (написания программы). Имя переменной не может начинаться с числа. Регистр важен. Несколько выражений можно писать через пробел.

Обычно принят, но не обязателен следующий синтаксис:

Procedure(< name>(  )

)


Поделиться:



Последнее изменение этой страницы: 2019-04-19; Просмотров: 187; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.273 с.)
Главная | Случайная страница | Обратная связь