• Aucun résultat trouvé

EVALUATION OF FACTORS

Dans le document SWL,:lAN-GUAGE SPECIFICATION (Page 70-79)

9.1 EVALUATION OF FACTORS

7 December 1973 Page: ' 9-3

·The value of a conformity os 0 foetor is tho boolean value true if the type test is . successful and fal S9 otherwise (S99 9.2.1, Type Test Operators).

.

--

' .

The value of a variable, as a factor, is the value last assigned to it as possibly modified by subsequent assignments to its componentso

The value of an unsigned number is the value of type integer or real denoted by it in the specified radix system.

String constants consisting of a single character denote the value of type char of the character between the quote marks.

String ,constants of n (n> 1) characters denote the string (n) value consisting of the characters between the quote marks.,

The constant nil denotes 'a null pointer value of any pointer type.

A constant identifier is replaced by the constant it denotes. If this in trun is a constant identifier the process is repeated until a constant of one of the above forms results. The value is then obtained as above.

'The value of 'a definite value constructor is the value obtained from the values of its constituent expressions of type specified by its type identifier.

The value of an up-arrow followed by a variable of type T is th'e pointer value of type /\T that- designates that variable.

SWL LANGUAGE SPECIFICATION

9.0 Expressions.

Simple expressions:

Expressions:

x

+ y -x·

huel or hue2 i

* i +

1

7 December 1973 Page: 9-4

hue - $colorset [red, green]

x = 1 p

<

=2·

(i

<

j) =

(i <

k) c in hue 1

SWL LANGUAGE SPECIFICATION

9.0 Expressions

9.1 Evaluation of Factors

7 December 1973 Page: . 9-5

The value of an up-arrow followed by a procedure identifier of proc type P is the pointer to procedure value of type t\ P that designares the current instance of declara-tion of that procedure. M

The value of an up-arrow followed by a la~el is the pointer to label value of type t\label that designates the current instance of declaration ~f the label (see 10.0,

STATEMENTS).

M

A function designah?rspecifies the execution of a Function. The actual parameters are substituted for the corresponding formal parameters in the declaration of the function.

The body is then executed. The value of the function designator is the value last assigned to the function identifier. The procedure reference must be to a procedure with a return type. The meaning of, and restrictions on, the actual parameters is the same as for the procedure call statement (see 1003.1).

The value of a parenthesized expression is the value of the expression which is en-closed by the parentheses.

The type of the value of a factor obtained from a variable or function designator whose type is a subrange of some scalar type is that scalar type.

" Release 1 does not support pointer to procedure or pointer

to label values.

SWL LAN GUAGE SPECIFICATION

900 Expressions

9~2 Operators

9.2 OPERATORS

9.2.1

Type Testing Operators 7 December 1973 Page: '9-6

Operators perform operations on a value or a pair of values to produce a new value.

Most of the operators are de'fined only on basic types, though some are defined on most types. The following sections ,define the range of applicability, as well as , ,resul t, of the defined operators.

TYPE TESTING OPERATORS

used to determine last assigned

the type identifier on the'type of the value of

the union variable on the

The pointer type test operator .. =} returns the ean \(J lue ~ if the pointer variable on the " type pointer to the type oft yalue of the union variable on the right. th~n the poi nfer variabl e on the to designate

union variable; otherwise the value is false and

9.2.2 ,NOT OPERATOR

The not operator, ~, applies to factors of type boolean and set. When applied to

, ,

'type boolean the meaning is negation - i.e., not true == false and not, false, == true.

. - - --

-When applied to a set the meaning is set complement with r~spect to the base type -i.e., the set of all elements of the base type not contained in the specified set.

SWL LANGUAGE SPECIFICATION

9.0 Expressions 9.2 Operators

9.2.3 MULTIPLYING OPERATORS

, 9.2.3

Multiplying Operators 7 Decembe'r 1973 Page: 9-7

The following table shows the multiplying operators, the types of their permissible-operands, and the type of the result.

Operator Operation Operands Resul t

*

multiplication real real

integer integer

/

integer division integer integer

for a, b, n positive integers

a/b= n ,where" n ,is the Jargest intE;)ger such that b

*

n

<

= a

{-a)/b: (a)/(-b):"; (a/b) , alb: (-a)/(-b)

real division real real

--

-mod remainder, function integer integer

--

a mod b: a

-- -

(a/b>

. *

b

and logical land l boolean boolean

-

true and false: false, true and hue: true false and false: false, false and true: false

set intersection set of type set of type

-

the ,set consisting of elements common to the two setso

-SWL LANGUAGE SPECIFICATION

9.0 Expressions

9.2

Operators

9.2.4 SIGN OPERATORS

9.2.4

Sign Op~rators

7 December 1973 Page: 9-8

The + operator can be applied to integer and reattypes only. It denotes the identity operation and results in integer or oreal type respectively - i.e., a E + a.

The - operator can be applied to integer and real types only. It denotes sign inversion - i.e., -a == f6 - a.

9.2.5

ADDING OPERATORS

The following tabl e shows the adding operators, the types of their permissible operands, and the type of the result.

SWL LANGUAGE SPECIFICATION

SWL LANGUAGE SPECIFICATION

9.0

Expressions 9.2 Operators

9.2.6 RELATIONAL OPERATORS

9.2.6

Relational Operators 7 December 1973 Page:

9-10

Relational operators are the, primary' means of testing values 'in SWL. ' They return the boolean value true if the specified relation holds between the operands, and the value false otherwise.

9.2.6.1 Comparison of Scalars, Reals,and Strings.

All

six comparison operators

<

(less than),

<=

(less than or equal to),

>

(greater than),

>=

(greater than or equal to),

=

(equal to) and

/=

(not equal to) are defined between operands of the same scal or type, operands of type real, and operands of type string or 'string and 'char.

For operands of type integer or real they have their usual meaning.

For operands of any ordinal type T, a

=

b if and only if a and b are the same value;

a

<

b if and only if a precedes bin the ordered list of values defining T. .•

For operands of type, string (n) or string (1) and char, comparison is defined in the following way:

If one of the operands is ·of type char it is converted to the string (1) value consisting of that character; otherwise the strings must be of the same length.

Let n be the I ength of the resul ting string val ues a and b (n

>=

1), and cp be any

,

--of the six comparison operators, then:

SWL LANGUAGE SPECIFICATION

9.0 Expressions 9.2 Operators

a (1)

.<?E.

b (1)

or a {i)::; b (i) for all i (1 <=<k) and a (1<)

£E

b (k) (1

<

k <

=

h)

9.2.6.2 Relations Involving Sets

9.2.6

Relational Operators 7 Dece.mber 1973 Page: 9-11

The relation a in S is true if the scalar value a isa member of the set value 50 The base type of the set must be the same as I or a 5ubrange of, the type of the seal are The· set operations

=

(identical to),

/=

{different fromL

<=

(is included in), and

>=

(includes) are defined between two set values of the same base type.

Sl

=

52 is true if all members of 51 are contained in 52, and all members of 52 are contained in 5

J.

Sl

/=

S2is true when 51

=

52 is false.

Sl <= S2 is true "if all members of Sl are also members of 52.

Sl

>=

S2 is true ·if all members of 52 are also members of 51.

9~2.6.3 Relations Involving Other Types

Certain types in the language cannot be compared. These are stacks, heaps, sequences, unions, variant records, arrays of non-comparable component types, and records con-taining a field of a non-comparable type. The remaining types (including pointers to non-comparable types) are comparable for equality (=) and inequality (/=).

SWL LANGUAGE SPECIFICATION

9.0 Expressions

9.2

Operators

9.2.6

Relational Operators 7 December 1973 Page:

9-12

Two arrays are equal if their types are the same (i .e., subscript bounds and component types are identical) and elements with correspond(ng subscript values are equal.

Two records are' equal if they are of the· same type and their corresponding fields are equal.

Two pointers to procedure are equal if they designate the same instance of declaration·

of 0 procedure. M

+wo pointers to coproc are equal' if the), designate the same coproccsso

Two pointers to label are equal if they designate the same instance of definHion ofa'labclo M

Pointers of other types are equolif they designate the same variable. For adaptable pointers this means that their instantaneous type" (i.e'., including bounds or lengths) must be the same as the pointer they are being compared with. MM

The following table shows the rel.ational operators, the types of their permissible operands, and the type of the result~

M

Release 1 does not support pointers to procedure or pointers

Dans le document SWL,:lAN-GUAGE SPECIFICATION (Page 70-79)

Documents relatifs