A potential user of an interactive system has to learn a new language before he can actually use that system. This language contains all the sentences that he may use and all sentences the system may utter to him. Once he knows the language, he has sufficient knowledge of the system to use all its facilities. Developing an interactive system, therefore, can be looked upon as designing and implementing an artificial language. Using an interactive system is communicating in the same language. The language model of an interactive system puts emphasis on the user interface. It also allows us to investigate the function of syntax where the term syntax, will be used for all aspects of the language that have to do with its form.
The major property of the language is its semantic content. Syntax, more precisely the syntactic structure, should be such that the semantics are well-expressed. This overall function of syntax implies that syntax can be used as a tool for a designer. We will try to characterize the current state of the art with respect to syntactic methods in three design areas:
A designer of a system always has choices between two extremes:
The second extreme seems to be more attractive since it takes, throughout the design phase, the user into account. However, it is likely to be impractical as details of a conversation will not be known before actual implementation.
It is believed that syntax can be used to find an acceptable compromise. It is possible to define the function of a system in terms of user concepts. This description, leaving out all details, can be and should be, equally well understandable by both user and designer.
It is possible to document this language skeleton in the form of the top of a syntax tree. This tree should be used as a basis for further refinement of the design as well as for user specification of the system. We then have the following picture:
Before further refinement takes place, semantic assertions should be made which must not be violated in the refinement process. One very important assertion is that a user should have a good overall view of the system and the way it is organised. When operating the system, he needs to have navigational aids to tell him where he is and where he can go. It is a safe strategy to explicitly add the required syntactic constructs to give these navigational aids on a higher level of the design phase. When they turn out to be superfluous they can be easily removed. In general, it is impossible to add these facilities after the design phase.
A second assertion, which needs to be safeguarded during the refinement phase, concerns the basic concepts. They must remain recognizable. Although a parser may be able to recognise a basic construct, a user may not. At every level, the distinction between concepts should be defined before refinement. This again may add more syntax.
In most systems with a top-down, menu-driven organisation, examples can be found which violate these rules. Experience with programming languages shows that improvements in these areas make systems more effective and efficient. Everybody who has served as a program advisor (say, in a computing centre) knows that it is generally impossible to deduce a programmers mistake from his interpretation of what has happened. A system which allows for easy unambiguous interpretation gives him an easy job, and strongly reduces the number of programmers asking for help.
Device independence has a strong connection with program portability. The characteristics of portability are well known and have had in the recent past much attention. I will therefore emphasize an equally important aspect of device independence which has not received very much attention (and may be more difficult to solve).
The device independence I have in mind concerns the dialogue. The user is not aware of the physical devices he is using. Instead, he is fully concentrating on the communication. Using the same top-down model of the previous section, this requirement of device independence can be formulated as finding the lowest level of refinement. This level provides the user primitives. These primitives are to be understood not only as data types but also as operations.
Approximately, user primitives should be of the same complexity, as the operating instructions used to provide them. If one wants to implement a primitive on a given device one not only has to look at that primitive, but at other primitives as well. If all primitives are not equally easy to use, the user, will be forced into unnatural dialogues because he wants to avoid certain primitives.
Although syntax is by far an insufficient tool, it is essential because it must provide a complete layer of user primitives before a reasonable compromise between them can be found. The compromise tries to find, for a given set of primitives, a balanced implementation on the available resources. Only if that is impossible, will the primitives themselves be changed.
So far the use of syntax as a tool has not made syntax more complicated. The concept of a top down design even postulates that (like in ordinary program design) the top of the syntax structure is simple.
Unlike top down design and device independence, context conditions are still an open problem. The semantics are unclear and hence it is not known what syntactical structure has to be chosen. By dialogue context problem we think of the following general problem. A dialogue proceeds in steps. Each step consisting of an answered question:
S: Q,A.
Both question and answer can be made up of steps. In each step a semantic relation may exist which we may wish to express by a corresponding syntactic structure. Examples of such relations are: synchronization, type - or value correspondence and feedback relations.
Current practice in programming languages is not to express context sensitivity through syntax. Context conditions are still in the realm of semantics. The reason for this is that, for non-trivial languages, the context-free syntax is already complicated enough. There is a clear distinction here between programming languages and dialogue languages. The latter have a much more basic context sensitivity. There are a few examples of programming languages (like ALGOL 68) which require context sensitive parsing. Almost all compiler writers for ALGOL 68 have tried to rearrange the syntax in such a way that it is context-free except for a finite number of well defined places.
Context-conditions occurring frequently in the language (for example, when a variable must be declared within the scope of its use) are never enforced by syntax. On the other hand, synchronisation requirements are explicitly stated in a number of proposed systems programming languages.
The message here is that syntax should remain manageable, especially when it has to serve as a design tool. In particular the requirements imposed on syntax in the previous two sections recommend that syntax remains simple. In spite of the fact that problems concerned with context conditions are very difficult, I think that no solution can be accepted which sacrifices either clarity or device independence.
There is no objection, of course, against putting context conditions into syntax, for the purpose of arriving at a better understanding. The context can be provided by the syntax in four forms (three of which are represented in the position papers):
One not represented, is introducing the context by a two-level grammar. However, the other three suffice to illustrate the problems.
In the case of states, each question and answer can imply a state transition. These new states can then be affixed to certain steps, thereby restricting the number of possible steps.
In the case of synchronisation certain steps may be carried out in parallel, but certain questions have to precede certain answers as well as certain steps having to precede other steps.
In the case of hierarchy, a syntax rule may be parametrised or change the environment for subsequent rules upon return.
The first two forms are more powerful ones but lead very quickly to large syntaxes and inefficient parsers. The third is semantically much more modest, but it does produce a much smaller syntax.
An important point in all three methods is that they provide a mechanism to relate input and output. The state of the art is that, for lack of knowledge and methodology, input and output are treated as independent concepts.
No questions about the syntax of a certain language can be satisfactorily answered without taking semantics into account. We can now reconsider thinking about the basic semantics of interaction, knowing that the syntax is there to support it.
(1) D.Alpert and D.L.Bitzer, 'Advances in Computer-Based Education1, Science, 167, 1582-1590 (1970).