Syntax

Case is distinguished in each of characters, strings and identifiers, so that variable-name and Variable-name are different, but where a character is used in a positional number representation (e.g. #\x3Ad) the case is ignored. Thus, case is also significant in this definition and, as will be observed later, all the special form and standard function names are lower case. In this section, and throughout this text, the names for individual character glyphs are those used in ISO/IEC DIS 646:1990.

The minimal character set to support EuLisp is defined in Table . The language as defined in this text uses only the characters given in this table. Thus, left hand sides of the productions in this table define and name groups of characters which are used later in this definition: decimal digit, upper letter, lower letter, letter, other character and special character. Any character not specified here is classified under other character, which permits its use as an initial or a constituent character of an identifier (see section ?? ).

Minimal character set

decimal digit = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'; upper letter = 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z'; lower letter = 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z'; letter = upper letter | lower letter; other character = '*' | '/' | '<' | '=' | '>' | '+' | '-' | '.' | '%' | '!' | '^' ; special character = ';' | "'" | ',' | '\' | '"' | '#' | '(' | ')' | '`' | '|' | '@' ; non-alphanumeric = other character | special character | "any other character supported by the configuration"; level 0 character = decimal digit | letter | other character | special character;

Whitespace and Comments

Whitespace characters are space and newline. The newline character is also used to represent end of record for configurations providing such an input model, thus, a reference to newline in this definition should also be read as a reference to end of record. The only use of whitespace is to improve the legibility of programs for human readers. Whitespace separates tokens and is only significant in a string or when it occurs escaped within an identifier.

A comment is introduced by the comment-begin glyph, called semicolon (;) and continues up to, but does not include, the end of the line. Hence, a comment cannot occur in the middle of a token because of the whitespace in the form of the newline. Thus a comment is equivalent to whitespace.

There is no notation in EuLisp for block comments.

Objects

The syntax of the classes of objects that can be read by EuLisp is defined in the section of this definition corresponding to the class as defined in Table . The syntax for identifiers corresponds to that for symbols.

Syntax of objects for reading and writing

object = character (* Section ?? *) | float (* Section ?? *) | integer (* Section ?? *) | list (* Section ?? *) | string (* Section ?? *) | symbol (* Section ?? *) | vector (* Section ?? *)
Julian Padget, jap@maths.bath.ac.uk, this version December 21, 1994