Next: scheme lex notation, Up: scheme lex [Index]
The syntax of Scheme code is organized in three levels:
Syntactic data (also called external representations) double as a
notation for objects, and Scheme’s (rnrs io ports (6)) library
provides the get-datum and put-datum procedures for
reading and writing syntactic data, converting between their textual
representation and the corresponding objects. Port
input/output. Each syntactic datum represents a corresponding
datum value. A syntactic datum can be used in a program to
obtain the corresponding datum value using quote. Quotation
Scheme source code consists of syntactic data and (non–significant) comments. Syntactic data in Scheme source code are called forms. (A form nested inside another form is called a subform.) Consequently, Scheme’s syntax has the property that any sequence of characters that is a form is also a syntactic datum representing some object. This can lead to confusion, since it may not be obvious out of context whether a given sequence of characters is intended to be a representation of objects or the text of a program. It is also a source of power, since it facilitates writing programs such as interpreters or compilers that treat programs as objects (or vice versa).
A datum value may have several different external representations. For
example, both #e28.000 and #x1c are syntactic data
representing the exact integer object 28, and the syntactic data
(8 13), ( 08 13 ), (8 . (13 . ())) all represent a
list containing the exact integer objects 8 and 13. Syntactic data that
represent equal objects (in the sense of equal?; baselib predicates) are always equivalent as forms of a program.
Because of the close correspondence between syntactic data and datum values, this report sometimes uses the term datum for either a syntactic datum or a datum value when the exact meaning is apparent from the context.
An implementation must not extend the lexical or datum syntax in any
way, with one exception: it need not treat the syntax
#!<identifier>, for any <identifier> (scheme lex syntax identifiers) that is not r6rs, as a syntax violation, and it may
use specific #!–prefixed identifiers as flags indicating that
subsequent input contains extensions to the standard lexical or datum
syntax. The syntax #!r6rs may be used to signify that the input
afterward is written with the lexical syntax and datum syntax described
by this report. #!r6rs is otherwise treated as a comment;
scheme lex syntax whitespace and comments.
Next: scheme lex notation, Up: scheme lex [Index]