Skill 语言用户手册---第一章--1、2节

本文由 shirdon 于 2014-6-7 16:20 发布在  Skill 语言中文版    


一直想做一个SKILL语言的中文版,如今终于是有时间做了呵呵,翻译的难免有错还请各位不要见怪。以上!

  

第一节 概述

Cadence® SKILL语言是一个基于流行的人工智能Lisp语言的高级交互式编程语言。此外,skill语言亦支持更传统的类似C语言语法,这种支持允许一个新手用户能够快速学会使用系统,而专业程序员可以访问和Lisp编程语言一样的强大功能。简单地说,Skill像计算器一样易于使用;进一步来讲,一款功能强大的编程语言,它的应用几乎是无限的。

SKILL通过命令行功能接口连接到底层的子系统。

SKILL让您快速,轻松地自定义现有的CAD应用程序 ,并帮助您开发新应用程序。

SKILL通过应用程序的功能来访问每个Cadence的工具编程接口。

本文档描述的功能,适用于所有Cadence工具,无论是在图形或非图形环境下。一旦你掌握了这些基本功能,你需要只学了一些新的功能来访问Cadence的环境中的任何工具。

 

 

1    程序标识

在SKILL中,函数调用是可以写成下列符号的。

1.代数标识【大部分语言方式】,也就是 func(ARG1 ARG2... )。

2.前缀标识【Lisp编程语言方式】,也就是(func ARG1 ARG2...)前缀符号。

为了便于比较,这里分别采用上面两种方法写了一个程序,以供参考;

代数标识方式:

procedure( fibonacci(n)
            if( (n  == 1 || n == 2) then
                1
            else fibonacci(n-1) + fibonacci(n-2)
                )
        )

前缀Lisp标识: 

(defun fibonacci (n)
    (cond
        ((or (equal n 1) (equal n 2)) 1)
        (t (plus (fibonacci (difference n 1))
            (fibonacci (difference n 2))))
    )
)

2     数据操作    

由于Skill程序和Lisp程序一样,是以lists(这里翻译为列表)形式表示,故它们可以像数据一样操作。您可以动态地创建,修改,或选择性地赋值函数定义和表达式。这种数据操作能力是选择Lisp成为人工智能应用语言主要原因之一。因为它充分利用了Lisp语言的“程序就是数据”的概念,所以SKILL可以用来编写灵活且强大的应用程序。

许多SKILL List(列表)操作函数都是可用的。这些功能操作,在大多数情况下,类似Lisp中的同名函数,尤其是弗兰兹的Lisp语支。

SKILL 提供一个特殊符号来创建模板列表。这个符号借鉴于Common List,并允许within a quoted form(在一个 引用表单里)选择性地赋值。选择性赋值消除长序列对 list 和 append 的调用。具体见第二章 Backquote(`)----主键盘数字键那一行最左边一个或ESC下方那个带波浪线的键,直接按就是, Comma(,)---逗号, and Comma-At(@)。

不像许多其他的编程语言,包括Common Lisp,Skill没有独立的字符数据类型。字符通过单个字符符号来替代。例如,字符“A”,也是符号“A”。不可打印的字符可以使用转义序列表示。    

 

第二节 Cadence SKILL语言一览
这节速览了SKILL编程语言的各个方面。这些相同的主题在后续章节中将有更详细的讨论。

本节将介绍新的术语,并概览一下Cadence的框架环境。它探讨了SKILL数据,函数调用,变量和运算符,然后告诉你如何解决一些常见问题。虽然每个应用程序都定义了SKILL接口的详细信息,但是当给出实例时,这个文件通常指向Cadence Design Framework II(设计框架II)环境

SKILL是在Cadence环境的命令语言。每当你使用forms, menus, and bindkeys(窗体,菜单和bindkeys),Cadence的软件触发SKILL函数来完成您的任务。例如,在大多数情况下,SKILL函数可以

    打开设计窗口

    由2倍放大

    放置在一个设计实例或矩形

    其他SKILL函数计算或获取来自Cadence的框架环境或设计的数据。例如,SKILL函数可以检索当前窗口的边框或获取层面上的所有shape(Allegro中的数据对象之一)的list(列表)。

    您可以直接在命令行中输入SKILL函数绕过图形用户界面。

1     术语与定义 

output

SKILL输出的目标可以是一个xterm屏幕,设计窗口,文件,或在许多情况下的命令解释器窗口(CIW)。
     

 CIW  (Linux环境下
      许多Cadence应用的启动窗口,包含一个输入行,输出区域,启动各种工具命令的菜单栏,以及一般信息的提示。 CIW的输出区域是许多本手册中使用的例子的目的地。
     

SKILL interpreter (SKILL解释器)

技能解释器执行Cadence环境中的SKILL程序。解释器将SKILL程序的文本源代码转换成内部数据结构,在程序执行期间,which it actively consults。
     

      compiler (编译器)
      A compiler translates source code into a target representation, which might be machine instructions or an intermediate instruction set .
      一个编译器将源代码转换成目标代码,这或许是机器指令抑或中间指令集。
     

      SKILL Function (SKILL函数)
      A named, parameterizable body of one or more SKILL expressions. You can invoke any SKILL function from the command input line available in the application by using its name and providing appropriate parameters.
      一个命名的包含一条或多条SKILL语句的参数体。您可以在应用程序中通过命令输入行使用它的名字或提供正确的参数来调用任何SKILL函数。

 

      SKILL procedure

      This term is used interchangeably with SKILL function.

 

2     SKILL函数调用
      有许多方法提交一个SKILL函数到SKILL解释器进行赋值。在许多应用中,只要您使用forms, menus, and bindkeysCadence的软件触发相应的SKILL函数完成你的任务通常情况下,不需要关注SKILL函数任何语法问题
 

 

Bindkeys (捆绑键---就是快捷键
    一个bindkey将SKILL函数关联到一个键盘事件激发键盘事件Cadence的软件将SKILL函数发送SKILL解释器进行赋值执行 
     

form(窗体
      有些函数需要提供数据在弹出窗体填写 
     

menu(菜单)
      当您在菜单中选择一个项目时,系统会发送SKILL函数发送SKILL解释器进行赋值执行 
     

CIW
      您可以在CIW直接输入一个SKILL函数即时赋值执行 
     

SKILL  Process

您可以启动一个独立的UNIX进程,可以直接提交SKILL函数到SKILL解释器。 您可以通过加载SKILL源代码文件提交Skill函数的集合赋值执行

  3     返回值是什么

所有SKILL函数计算数据被作为函数的返回您可以 

      1.将返回值赋值给一个SKILL变量 

      2.将返回值传递给另一个SKILL函数

      任何类型的数据可以是一个返回值。SKILL支持多种数据类型,包括integers, text strings, and lists(整数,文本字符串和列表)

      4.     Simplest SKILL Data

       最简单的SKILL语句是一个数据项. SKILL数据区分大小写。You can enter data in many familiar ways, including the following。 

   Sample SKILL Data Items

Data Type

Syntax Example

integer

5

floating point

5.3

text string

"Mary had a little lamb"

 

      5.     如何调用一个函数
      函数名是区分大小写的调用一个函数,要说明其名称和一对括号中的参数。“=>”后面的内容为执行后的内容

 strcat( "Mary" " had" " a" " little" " lamb" )

=> "Mary had a little lamb"

  注:1.在函数名和左括号之间不允许有空格    

         2.几个函数调用可以在一行上使用空格将它们分开     

         3.可以在命令行或者一个源代码文件中跨越多行

 strcat(       "Mary" " had" " a"     
" little" " lamb" )
=> "Mary had a little lamb"
      

          4.当您输入在一行中的几个函数调用,系统只显示来自最后一个函数调用返回的结果

 

 

      6      运算符

      SKILL提供许多运算符。每个运算符对应一个SKILL函数.下面是运算符的一些例子:

 

Sample SKILL Operators

Operators in
Descending
Precedence

Underlying
Function

Operation

**

expt (乘方)

arithmetic

*
/

times
quotient

arithmetic

+
-

plus
difference

arithmetic

++s, s++

preincrement, postincrement

arithmetic

==
!=

equal
nequal

tests for equality
tests for inequality

=

setq

assignment

下面的例子显示在单行用运算符对几个函数/功能的调用 。调用通过空格彼此独立。 系统只显示最后调用函数的返回值。

x = 5 y = 6 x+y
=> 11

      7    使用变量
      你并不需要在SKILL中声明变量SKILL创建一个变量,在一个session(会话)中第一次遇到该变量时变量名可以包含

      字母数字字符

      下划线(_

      问号

      变量的第一个字符不能是数字。使用赋值运算符来给一个变量存储一个你可以输入变量名来或得它的值类型的SKILL函数返回变量的当前值的数据类型

lineCount = 4            => 4
lineCount                => 4
type( lineCount )        => fixnum
lineCount = "abc"        => "abc"
lineCount                => "abc"
type( lineCount )        => string 

8     另一种方式输入功能

   除了通过声明函数名字以及一对括号中的参数调用一个函数如下面所示可以使用另外两种语法形式来调用SKILL函数。

strcat( "Mary" " had" " a" " little" " lamb" ) 
  • 您可以将左括号放到函数名的左边(Lisp 方式语法).

    ( strcat "Mary" " had" " a" " little" " lamb" ) 
    => "Mary had a little lamb"
  • 在SKILL函数处于顶层时,您可以省略外部的括号(if the SKILL function is the first element at your SKILL prompt, that is, at the top level.)

    strcat "Mary" " had" " a" " little" " lamb" 
    => "Mary had a little lamb"

以上三种样式皆可以用,编程时建议一致,推荐第一种样式。
 

    9 处理几个常见问题

     常见的三个问题:

     1.系统不响应

        如果您键入一个函数且触发返回后什么都没有发生,那很可能存在下面翻个问题。 

  • 不平衡的括号 

  • 不平衡的字符串引号 

  • The wrong log file(错误日志文件) filter set

      您或许输入的左括号多余右括号。下面的步骤大部分情况下都能触发系统响应。

  1. 键入右方括号( ] ) 。 这个符号可以代替所有外部的右括号;

  2. 如果还不能获得响应,您可以键入双引号(")后跟着键入右方括号 ( ] ),也就是("])

    在大部分情况会得到响应的

    2)不恰当的空格

    不要在函数名和左括号间输入空格. 注意下面的错误不提示多余的空格: 

  • 尝试使用strcat 函数连接几个字符串

    strcat ( "Mary" " had" " a" " little" " lamb") 
    Message: *Error* eval: not a function - "Mary"
  • 尝试赋值给一个变量.

    greeting = strcat ( "happy" " birthday" )
    Message: *Error* eval: unbound variable - strcat

      3)数据类型不匹配

      当您输入一个不正确的数据给一个SKILL函数会发生错误。 错误信息会提示数据类型错误。

strcat( "Mary had a" 5 )
Message: *Error* strcat: argument #2 should be either 
a string or a symbol (type template = "S") - 5

Here are the characters used in type templates for some common data types.

 

      Some Common Data Types

Data Type

Character in
Type Template

integer number

x

floating point number

f

symbol or character string

S

character string (text)

t

any data type (general)

g

For a complete list of data types supported by SKILL, see Data Types.


标签: 开始 用户手册

发表评论:

电子布局网  |  手机版  |  RSS  |  我要留言

All Rights Reserved. Powered by 电子布局--

sitemap