1. 基本程序结构
2.语法
(1)INPUT
Only use in a state.
(2)SAVE
Only use in a state.
(3)注释
两种方法可用。第一种,/**/。缺陷:不能重复包含;第二种,COMMENT ‘*******’。可出现在任何地方,且在使用图形化工具时可以显示。
(4)START
标志进程开始执行的点
(5)OUTPUT
发送消息给进程,也可以发送给自己。格式:
OUTPUT message_name TO process_name
(6)TASK
(7)CALL
类似于C中的函数调用。可以携带参数。格式:
CALL function_name(para list…);
(8)DECISION
类似于C中的switch…case….语句。格式如下:
DECISION value;
(1):
(2):
ENDDECISION;
(9)WHILE
格式:
WHILE 条件;
…..;
…..
ENDWHILE;
OUT 用于从WHILE中跳出;
(10)JOIN
类似于C中的goto。他可以跳转到一个 标志符标志的地方。他的使用有如下限制:不能从一个transition跳转到另一个transition;也不能跳出一个subautomaton、procedure或process;也不能跳转到一个terminator statement后。
(11)数据类型
◆bool 有值T和F。实现为一个字节
◆boolean 有值FALSE和TRUE。这种变量只应该用于和老的系统通信时使用。
◆byte, word, dword
无符号整数。变量长度分别为8,16,32位
◆shortint, integer, longint
有符号整数。变量长度分别是8,16,32位
◆real 32位长的实数类型
3.程序结构
程序有一系列的层次结构的模块构成。包括:SYS->SYSBLOCK->SERVICEBLOCK->PROGRAMBLOCK。在程序中,这些层次结构的模块的定义只有一个,但实例可以不止一个?
SYSTEM book;
ENDSYSTEM book;
IMPLEMENTATION tinybook OF SYSTEM book;
SYSTEMBLOCK booksysb;
ENDIMPLEMENTATION tinybook;
SYSTEMBLOCK booksysb;
ENDSYSTEMBLOCK booksysb;
IMPLEMENTATION book OF SYSTEMBLOCK booksysb;
SERVICEBLOCK bookserb;
ENDIMPLEMENTATION book;
SERVICEBLOCK bookserb;
ENDSERVICEBLOCK bookserb;
IMPLEMENTATION bookserb OF SERVICEBLOCK bookserb;
PROGRAMBLOCK bookprog;
ENDIMPLEMENTATION bookserb;
PROGRAMBLOCK bookprog;
ENDPROGRAMBLOCK bookprog;
IMPLEMENTATION bookprog OF PROGRAMBLOCK bookprog;
MASTER PROCESS bookmas;
ENDIMPLEMENTATION bookprog;
除了这个结构外,TNSDL还需要一些外部的标准文件帮助才能运行。这些文件类似于C语言里的标准头文件。这些标准文件需要包含在 .sdl的文件前面。而且,这些文件的包含一般是多层关系的,即在用户的sdl文件里可以只包含一个头文件,而在这个头文件里详细列出需要使用的实际头文件;在使用TNSDL转换工具时,工具会首先转换这些头文件并将其展开,然后再转换、连接用户自己的文件。当然,也可以把常用头文件的转换文件保留下来,如此当连接其他的用户文件时可以少一个转换步骤。
(1)include文件在编译或转换时的方式?经过试验, 我自定义的文件用include包含,里面定义的数据结构不能使用。
更正:include文件的出现位置很重要。在特定的位置出现,自定义的数据结构可以使用:如果文件include在MASTER PROCESS下,可以,在其外者不可以;在其他的IMPLEMENT中,可以;如果将这些IMPLEMENT单独实现成一个文件,在其中include自定义的文件,则不可以。
4 概念
(1)subautomaton
与process类似,但不能独立process而存在。一个process可能有几个不同的功能,可将每个功能实现为一个subautomaton。一个process可以包含普通的process body,也可以包含由几个subautomaton构成的process body。
(2)同步服务与异步服务
同步服务通常实现成函数或procedure,而异步服务实现为一系列的消息交互(协议)。当使用同步服务时,在服务完成前,调用者不能处理其他的事情;而异步服务则没这个限制。
同步服务实现为procedure时,必须在申明前加上PROCEDURE关键字。
异步服务声明在SERVICE BLOCK中或更上层 ,同步服务还可以声明在 program block中。
同步服务还可以被收集到一起形成 一个LIBRARY;例如 :
LIBRARY lib_name
………….. 服务定义
ENDLIBRARY
形成的库 可以被其他的program使用。
(3)procedure
类似于process。他里面也可以有状态机、INPUT、OUTPUT等等。他可以被其他procedure、process或者自己调用,完成特定的功能。他没有自己的消息队列,共享调用者的消息队列。Procedure可以定义在process中,也可以定义在module中。
(4)hand process的启动
Hand process需要在master process中用命令显示启动。
Create HandProcessName(para1,…..,paran)
(5)指针
在需要使用指针的时候,可以用符号 @ 取对象的地址。
(6)MACRO
用于声明中,指示此处声明的东东转换为C代码时,应该实现为一个宏。
而且需要在一个.h文件中中手动实现这个宏,并在调用转化命令时,在命令行中加上 -g file_name.h
5 编译