概述
JOVIAL语言是一种高级程序设计语言。它是美国空军航空电子工程的产物。从一九五八年至今,JOVIAL语言一直是航空电子工程主要编程语言。近三十年来.,它先后被用来完成SAGE,SACCS等大型肮空作战及控制系统。在此期何,根据工程中出现的问题及所获得的经验,JOVIAL语言历经了多次修订,至今,它已成为一种适用面广,功能强的实时编程语言。
在JOVIAL语言发展的过程中,出现过许多JOVIAL版本。其中,有影响的版本有J3,J3B, J73等。JOVIAL语言的各种版本已在多种机器上实现,并在许多领域内得到了广泛的应用。典型的应用领域有航空电子,控制及指挥以及导弹飞行控制等。
JOYIAL语言支持模块化或结构化程序设计。使用COMPOOL模块,可对数据对象及子程序特性进行集中描述,从而有益于进行模块连接及数据共享。结构化的控制流结构使程序具有良好的结构,进而易于理解及维护。JOVIAL语言支持的数据有:简单项(ITEM),结构型表(TABLE )以及组合型块(BLOCK)。数据类型有:整型,枚举,浮点,定点,字符,位串以及指针。控制流结构有:循环,分支,条件,过程调用以及停机等。从JOVIAL程序的结构来看,JOYIAL属于ALGOL族,其程序结构呈嵌套式。1
数据对象及其说明JOVIAL数据对象JOVIAL语言所支持的数据对象是面向工程及控制的,而不是面向商务的。
1、整型:分有符号和无符号两种。整型的用途在于完成计数,如循环次数。
2、浮点:具有浮动比例因子,用来记录一些物理量,特别是那些取值范围积大的物理量,如距离,速度,温度,时间等。
3、定点:具有常数比例因子,可表示取值范围不大的物理量。定点运算比浮点运算节省时间和空间。
4、位串:即二进制位串,可用来表示开关设备的状态,如记录控台开关的设置状况。
5、字符串:即字符序列。字符串用来表示某种通信信息,如当程序某一部分失效后,可将一字符串回送到控制台,告诉控制台入员失效的原因,位置等。
6、状态:状态数据是一些特殊字,用来表示某一时刻或系统某一部分的状态。如用状态字'V(OK)','V(WEAK)'或'V(BAD)'可表示某一电源电力状况。
7、指针:地址型数据,表示数据或过程的地址。通过指针可间接访问数据。
8、表:由上述简单数据构成的一种结构型数据,相当于其他高级语言中的数组。
9、块:集中在某一存储区内的一组数据,用来支持存储管理。块中可包含各类数据,也可包含块型数据。
数据对象的说明JOYIAL程序中的各类数据对象是通过说明语句引入的。说明语句给编译程序提供了有关数据对象存取所需的信息,编译程序根据这些信息给数据对象分配地址。例如:
ITEM COUNT U 10;
说明COUNT是一个无符号整数,至少占10个二进制位的空间。编译程序很可能会给它分配多于10位的空间以便于以后进行运算。
上例中,用户指明COUNT至少得占10位空间。用户也可以不指明这一点让编译程序自动给COUNT分配一缺省大小的空间。这类数据的缺省空间与具体的实现有关,如上例说明,一种实现缺省大小为16,而另一种实现中也可能是32。1
符号JOVIAL符号是由48个符号的字母粗成。它俩是26个英文字母,10个数字,以及杂七杂八的符号(包括空白,基本符号,美元符号$等)。
字母:A; B; C; D; E; F; G; H; I; J; A; L; M; N; O; P; Q; R; S; T; U; Y; W; X; Y; Z
数字:0; 1; 2; 3; 4; 5; 6; 7; 8; 9
符号:字母;数字;空白; ( ; ) ; + ; 一 ; * ; / ; · ; ,; ‘ ; = ; $
这些符号粗成的一定的行称为JOVIAL的符号:定义符;标识符;和常数,它们又一起再构成语言的短语和句子。为了便于阅读,这些符号之间可用任意个空白隔开。因此可以包括非嵌入的空白,在JOVIAL中行拮束不执行什么,这是必要的致使符号可以跨行。
定义符定义符(所谓定义符即它们的语法功能在于限定标识符和常数用的)是JOVIAL的动词和标点。它们有着固定的意义,定义如下:
算术算符:+ ; 一 ; * ; / ; **
关系算符:EQ; GR; CQ; LQ; LS; NQ
逻辑算符:AND; OR; NOT
顺序算符:IF; GOTO; FOR; TEST; CLOSE; RETURN; STOP; IFEITHer; ORIF
文件操作符:OPEN; SHUT; INPUT; OUTPUT
函数符:BIT; BYTE; MANT; CHAR; ODD; NENT; NWDSEN; ALL;ENTRY;POSition
分隔符:· ; , ; = ; == ; ' ; … ; $
括号:( ; ) ; (/;/) ; ($;$) ; “ ; “ ;BEGIN; END; DIRECT; JOVIAL; START;TERM
说明符:ITEM; MODE; ARRAY; TABLE; STRING; OVERLAY; DEFINE;SWITCH; PROCedure; FILE
叙述符:Floating; Fised; Dual; Signed; Unsigned; Rounded; Hollerith; Transmission; Status; Boolean; Variable; Rigid; Preset; Like; Parallel;Serial; Dense; Medium; No; Binary
标识符任何程序都耍借助于符号经常地引用它周围的信息。一个机器语言程序通过内存的地址或包括某信息的存储装置来调用所需的信息。JOVIAL程序是通过标识符来稠用信息的。因此JOVIAL的标识符就是一个语句名,一个开关名,一个过程名,一个项目名,一个表格名或者一个文件名。
一个标识符是一个任意的字母数字名(当然按通常记忆需耍)它们用以标示JOVIAL程序周围信息中的一个具体元素。
名字$字母:[字母;数字]s[']
名字的构成可以适应程序设计者的习惯,但是,为了提高阅读能力,应尽可能的记述下来。一个名字必须以一字母打头,后面跟上若干个字母或数字,为了便于阅读它们可以用'号隔开,因为不允许内嵌空白,一个基本符号可用来联结多字的名字。
一个名字不可以和定义符的拼写相重,也不能以一个基本记号桔束。
标识符的作用域是由这样一组句子粗成,对这些句子来说标识符是有定义的。在这个域内,标识符必须有一致的拼写。然而语句名和开关名可以从上下文关系与过程名,项目名,表格名和文件名区分开。因此对这两类简的唯一性实际上井不要求(例如,语句名可以再次用作项目名,但是实用时不提倡这样做)。
除了语句名字可由上下文来确定外,所有的JOVIAL标识符必须通过某种说明来定义,以使得标识符与外围信息的关系确立起来。这种就明或直接由程序设计者明确提供,或者简接的由系统说明的COMPOOL表来提供,但用到的标识符若没有在过程(或程序)中定义,必须在某个较高极中即在程序(或COMPOOL)中定义。
标识符可以只对一个过程,一个程序或一个完整的程序系扰而定义。定义在一个程序或过程内的标识符一律是局部的,井不与该程序或过程之外的拼写一致的标识符发生冲突。在这种情况下可能发生冲突,即所谓“外面”的标识符的作用域包括了“里面”标识符的作用域。
常数一常数表示一个具体数据的值,该值不受程序执行的影响,JOVIAL程序处理四种数据:由有理数及有理数对组成的数值,由JOVIAL符号串组成的文字值,状态值(如Good, Fair, Poor等任意命名的一些独立的状态);以及布尔值(即True和Ealse两值)四种。于是一个JOVIAL常数指示了一个具体的值如同用具体机器的语言符号所表示的一样。
数值,整数,定点,浮点常数通常按十进制理解;八进常数很明显只有整数意义。双值数则表示数值对的意义。文字常数表示一个JOVIAL符号串,这些符号是用两种可能的每个符号6bit(二进制数位)的编码方式之一来表示的;状态常数是一个记忆名指出质量或种类,而不是指示数值;布尔常数或者指示True或指示False。
常数$整常数;浮点常数;定点常数;八进常数;双值常数;文字常数;状态常数;布尔常数。
JOVIAL常数已包含了全部所需的信息,以便翻译程序执行必要的常数向机器符号的转换,又因表示常数值的机器符号是不能再复杂了,一个单钝的符号就可以表示很多不同的值。2