Hi Folks, Would you provide a use case for creating two levels of syntax please? I will provide two use cases, one from Lisp and the other from XML:Books. Use Case #1: Recall from my previous message that the Lisp language defines two levels of syntax: s-expressions and Lisp forms. A list that is an s-expression may contain any elements,
whereas a list that is a Lisp form must start with a symbol (This is a bit simplified – see John Cowan’s post). Now here’s why the Lisp folks created two levels of syntax: Lisp has functions and macros. The arguments to a function must be Lisp forms, which
are evaluated before calling the function. Conversely, the arguments to a macro only have to be s-expressions, the arguments are not evaluated before calling the macro; the macro assigns a meaning to the s-expression (very neat!). (I realize this explanation
is a bit terse. Hopefully, however, it gives you some feel for why two levels of syntax are important/needed in Lisp.) Use Case #2: Let’s assume the data needed to describe a Book is its Title, Author, and Publication Year. Now here’s why you should create two levels of syntax: Create a first level of
syntax which merely requires the three items be present, i.e., no order required. Create a second level of syntax that mandates a particular order for the three items.
The following shows how to implement the two levels of syntax using XML Schema: <xs:complexType
name="Unordered-Book-Data"> The second level of syntax (Ordered-Book-Data) is a restricted form of the first level of syntax (Unordered-Book-Data). Notice that that’s analogous to Lisp: Lisp forms are a restricted version
of s-expressions. Applications that are happy with the data in any order receive the data in the first level of syntax.
Applications that require ordered data receive the data in the second level of syntax.
--------------------
Okay, your turn. Please provide a use case for two levels of syntax. /Roger |