|
token | --> name
|
| | natural-number
|
| | unsigned-float
|
| | variable
|
| | string
|
| | punctuation-char
|
| | space
|
| | comment
|
| | full-stop
|
|
name | --> quoted-name
|
| | word
|
| | symbol
|
| | solo-char
|
| | [ ?layout-char... ]
|
| | { ?layout-char... }
|
|
quoted-name | --> ' ?quoted-item... '
|
|
quoted-item | --> char | {other than ' or \ }
|
| | ''
|
| | \ escape-sequence | {unless character escapes have been switched off}
|
|
word | --> small-letter ?alpha...
|
|
symbol | --> symbol-char... | {except in the case of a full-stop or where the first 2 chars are /* }
|
|
natural-number | --> digit...
|
| | base ' alphanumeric... | {where each alphanumeric must be less than base; count a as 10, b as 11, etc.}
|
| | zero ' quoted-item | {This yields the ASCII equivalent of quoted-item}
|
|
base | --> digit... | {must be in the range 0..36}
|
|
zero | --> 0
|
unsigned-float | --> simple-float
|
| | simple-float E exponent
|
|
simple-float | -->
|
| digit... decimal-point digit...
|
|
decimal-point | --> .
|
|
E | --> E | e
|
|
exponent | --> digit...
|
| | - digit...
|
| | + digit...
|
|
variable | --> underline ?alpha...
|
|
variable | --> capital-letter ?alpha..
|
|
string | --> " ?string-item... "
|
|
string-item | --> char | {other than " or \ }
|
| | ""
|
| | \ escape-sequence | {unless character escapes have been switched off}
|
|
escape-sequence | --> b | {backspace, character code 8}
|
| | t | {horizontal tab, character code 9}
|
| | n | {newline, character code 10}
|
| | v | {vertical tab, character code 11}
|
| | f | {form feed, character code 12}
|
| | r | {carriage return, character code 13}
|
| | e | {escape, character code 27}
|
| | d | {delete, character code 127}
|
| | ^? | {delete, character code 127}
|
| | a | {alarm, character code 7}
|
| | x CD | {character code hex CD, 2 digits}
|
| | Oct | {character code octal Oct, up to 3 digits}
|
| | ^ letter | {the control character letter mod 32}
|
| | c ?layout-char... | {ignored}
|
| | layout-char | {ignored}
|
| | char | {other than the above, represents itself}
|
|
space | --> layout-char...
|
|
comment | --> /* ?char... */ | {where ?char... must not contain */ }
|
| | % rest-of-line
|
|
rest-of-line | --> newline
|
| | ?not-end-of-line... newline
|
|
not-end-of-line | --> {any character except newline}
|
|
newline | --> {ASCII code 10}
|
|
full-stop | --> . layout-char
|
|
|
char | --> layout-char
|
| | alpha
|
| | symbol-char
|
| | solo-char
|
| | punctuation-char
|
| | quote-char
|
|
layout-char | --> {ASCII codes 1..32 and 127 -- includes space, tab, newline, and del}
|
|
alpha | --> alphanumeric | underline
|
|
alphanumeric | --> letter | digit
|
|
letter | --> capital-letter | small-letter
|
|
capital-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
|
|
small-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
|
|
digit | --> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
|
|
symbol-char | --> + | - | * | / | \ | ^ | < | > | = | ` | ~ | : | . | ? | @ | # | $ | &
|
|
solo-char | --> ; | !
|
|
punctuation-char | --> ( | ) | [ | ] | { | } | , | | | %
|
|
quote-char | --> ' | "
|
|
underline | --> _
|