Pat.Terry@p101.f4.n494.z5.fidonet.org (Pat Terry) (04/05/90)
control variable = identifier ;
initial value = ordinal expression ;
final value = ordinal expression ;
step value = constant expression ;
A.4 Variable Designators
variable designator =
entire designator |
indexed designator |
selected designator |
dereferenced designator ;
A.4.1 Entire Designators
entire designator = qualified identifier ;
A.4.2 Indexed Designators
indexed designator =
array designator, "[", index expression, { ",", index expression }, "]" ;
array designator = variable designator ;
index expression = ordinal expression ;
ordinal expression = expression ;
A.4.3 Selected Designators
selected designator = record designator, ".", field identifier ;
record designator = variable designator ;
field identifier = identifier ;
A.4.4 Dereferenced Designators
dereferenced designator = pointer designator, dereferencing operator ;
pointer designator = variable designator ;
dereferencing operator = "^";
A.5 Expressions
expression = simple expression, [ relational operator, simple expression ] ;
simple expression = [ sign ], term, { term operator, term } ;
term = factor, { factor operator, factor } ;
factor =
"(", expression, ")" |
not operator, factor |
function call |
value constructor |
constant literal ;
A.5.1 Infix Expressions
factor operator = "*" | "/" | "REM" | "DIV" | "MOD" | and operator ;
and operator = "AND" | "&" ;
term operator = "+" | "-" | "OR" ;
relational operator =
"=" | inequality operator | "<" | ">" | "<=" | ">=" | "IN" ;
inequality operator= "<>" | "#" ;
A.5.2 Prefix Expressions
sign = [ "+" | "-" ] ;
+++++ Note that all that is needed ia
sign = "+" | "-" ;
+++++ as the [] are already present in the production for simple expression
not operator = "NOT" | "~" ;
A.5.3 Value Designator
value designator =
entire value |
indexed value |
selected value |
dereferenced value ;
A.5.3.1 Entire Values
entire value = qualified identifier ;
A.5.3.2 Indexed Values
indexed value =
array value, "[", index expression, { ",", index expression }, "]" ;
array value = value designator ;
index expression = ordinal expression ;
A.5.3.3 Selected Values
selected value = record value, ".", field identifier ;
record value = value designator ;
A.5.3.4 Dereferenced Values
dereferenced value = pointer value, dereferencing operator ;
pointer value = value designator ;
A.5.4 Function Call
function call = function designator, "(", [ actual parameter list ], ")" ;
function designator = value designator;
A.5.5 Value Constructors
+++++ Note: This represents an addition to the language (except for sets)
value constructor = array constructor | record constructor | set constructor ;
A.5.5.1 Array Constructor
array constructor = type identifier, array definition ;
+++++ Note: this might be better as
array constructor = array type identifier, array definition ;
array type identifier = type identifier ;
array definition = "{", repeated element, { ",", repeated element }, "}" ;
repeated element = element, [ "BY", repetition factor ] ;
element = expression | array definition | record definition | set definition ;
repetition factor = constant expression ;
A.5.5.2 Record Constructors
record constructor = type identifier, record definition;
+++++ Note: this might be better as
record constructor = record type identifier, record definition;
record type identifier = type identifier ;
record definition = "{", [ repeated element, {"," , repeated element } ], "}" ;
field value = expression ;
+++++ Note; this last production is presumably a typographical error. An
earlier draft had
record definition = "{", field value, {"," , field value }, "}" ;
field value = expression ;
A.5.5.3 Set Constructors
set constructor = type identifier, set definition;
+++++ Note: this might be better as
set constructor = set type identifier, set definition;
set type identifier = type identifier ;
set definition = "{", [ member sequence]. "}" ;
member sequence = member, { "," , member } ;
member = singleton | interval;
singleton = ordinal expression ;
interval = ordinal expression, "..", ordinal expression ;
A.5.6 Constant Literals
constant literal =
whole number literal |
real literal |
string literal |
character literal ;
A.5.6.1 String Literals
string literal = single string, { catenate symbol, single string } ;
+++++ Note: the "catenation" option is new to the language.
single string = character string | string identifier ;
string identifier = qualified identifier ;
A.5.6.2 Character Literals
character literal = quoted character | character number literal ;
+++++ Note: These last sections are "incomplete" in that non-terminals are
introduced that are not defined in appendix A of D102. This is because one
is into the area of lexical/syntax analysis.
The relevant productions are given in section 5 of D102, as follows:
5.6.2 Whole number literals
whole number literal = decimal number | octal number | hexadecimal number ;
decimal number = digit, { digit } ;
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
octal number = octal digit, { octal digit }, "B" ;
octal digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" ;
hexadecimal number = digit, { hex digit }, "H";
digit = octal digit | "8" | "9" ;
hex digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" |
"A" | "B" | "C" | "D"| "E" | "F" ;
5.6.3 Real literals
real literal = digit, { digit }, ".", { digit }, [ scale factor ] ;
scale factor = "E", [ "+" | "-" ], digit, { digit} ;
5.6.4 String Literals
string literal =
"'", { national character - "'" }, "'" |
'"', { national character - '"' }, '"';
5.6.5 Character Literals
quoted character =
"'", national character - "'" , "'" |
'"', national character - '"' , '"';
character number literal = octal digit, { octal digit }, "C" ;
A.6 Qualified Identifiers
qualified identifier = identifier, { ".", identifier } ;
Some of the other productions of note given in section 5 of D102, but not
quoted in the appendix are
5.3 Identifiers
identifier = full identifier | portable identifier ;
portable identifier = simple letter, { [low line], simple alphanumeric } ;
low line = "_" ;
full identifier = letter, { [low line], national alphanumeric } ;
5.5.2.5 Catenate symbol
catenate symbol = normal catenate | alternative catenate ;
normal catenate = "||" ;
alternative catenate = "!!" ;
+++++ Note: normal catenate is unacceptable. The sequence || can already
appear in "empty" case lists.
5.7 Letters and national characters
letter = ? implementation defined alphabetic character ?
national character =
national alphanumeric | simple alphanumeric |
? implementation defined character ? ;
national alphanumeric = letter | national numeric ;
national numeric = ? implementation defined numeric character ? ;
simple alphanumeric = simple letter | digit ;
simple letter = "a".."z" | "A".."Z" ? ;
--
uucp: uunet!m2xenix!puddle!5!494!4.101!Pat.Terry
Internet: Pat.Terry@p101.f4.n494.z5.fidonet.org