The latest fixes have added a new chapter to rexxref, chapter 16 "Reserved
keywords", which details when a simple symbol will be recognized as an
expression terminator. I think this is a very welcome addition to the
reference manual.

Allow me to center the discussion around an example: the DO instruction.

TRL2 says

The sub-keywords WHILE and UNTIL are reserved within a DO instruction, in
that they cannot be used as symbols in any of the expressions. Similarly,
TO, BY, and FOR cannot be used in *expri*, *exprt*, *exprb*, or *exprf*.
FOREVER is also reserved, but only if it immediately follows the keyword DO.


Regina follows TRL2. The version of Object Rexx distributed with OS/2,
"OBJREXX 6.00 18 May 1999", also has the same paragraph.

ooRexx is much more flexible. It takes the "no reserved words" philosophy
of Rexx (which it inherited from PL/I) to a new level, because it allows to
use a symbol that would usually be considered to be a reserved word as a
normal variable if it is found between parenthesis (or brackets, but this
was not documented until the very recent addition of chapter 16). So, for
example, after to = 3,

Do i = 1 To to; Say i; End


produces a syntax error, while

Do i = 1 To (to); Say i; End


works perfectly.

One day, I realized that

Do i = 1 To >to ; Say i; End


was working. I reported it as a bug: the documentation said that reserved
symbols had to be between parenthesis to be usable as normal variables.
Rick pointed that a construction like

Do i = 1 To a~to ; Say i; End


produced an error, and that both cases should work in the same way.

Lately, there have been some fixes that modify the language so that these
constructions are both accepted. This is documented in the new chapter 16:

While typically these reserved keywords act as expression terminators,
using them within terms like message terms or Variable Reference terms, or
with parentheses around or within the expression, can prevent these
keywords from terminating the expression.


In the discussion of a new bug, I discovered that namespace-qualified
symbols are also accepted, even if they are reserved subkeywords. So, for
example

namespace:to


would not be recognized as a reserved subkeyword. This is still not
documented.

I understand and appreciate the general intention of these modifications:
they are an attempt to improve the language by making it as independent of
reserved keywords as possible.

But at the same time, I am afraid that this goes against the idea of
keeping the language small and simple.

Allow me to elaborate a little more. If the namespace feature is
documented, the mentioned paragraph should tell the user that a reserved
subkeyword can be used as a normal symbol when 1) it is between
parentheses; 2) when it is between brackets (I would strongly suggest
making this possibility explicit); 3) when it is used as a Variable
Reference term; 4) when it is the message name of a message term; and now
5) when it is a namespace-qualified symbol.

To me, it seems that this is getting complicated, very complicated, and
quite difficult to remember. With a suitable preparsing pass, a parser
could also accept subkeywords-as-variables as the right operands of most
binary operators (I checked it), but what would we gain from it?

Very little in terms of making our own life easier. And we would be getting
a language that would be more and more complicated.

I would suggest reverting things to something which can be effortlessly
explained and understood: a reserved subkeyword will not be recognized as
an expression terminator *if and only if it is found between parenthesis or
brackets*. And nothing more. No more special cases.

When things become too complicated, I feel forced to re-read the manual
continuously. It's a nuisance, not something which makes my programming
life easier.

I would prefer a syntax which is simple and easy to remember.

  Josep Maria
_______________________________________________
Oorexx-devel mailing list
Oorexx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oorexx-devel

Reply via email to