Each rule defining such a class of character
sequences has the following structure:
<Class Type>
<
[Member group :] Class Identifier [! Next group to activate]>
:: <Regular Expression>
We distinguish five types of classes:
A regular expression spezifies
the character sequences belonging to the class. Such a description usually
consists of the following elements and operators:
Character Set | ||||
---|---|---|---|---|
let | Byte | :: | '\00' .. '\ff'
| |
let | Control | :: | '\00' .. '\1f' | '\7f' | '\ff'
| |
Basic elements of tokens | ||||
let | Printable | :: | ||
ign | Space | :: | " "
| |
ign | Line | :: | "\n" | "\r\n" | "\r"
| |
ign | Page | :: | "\p"
| |
ign | Etx | :: | "\1a" { Byte }
| |
Definitions and simple tokens | ||||
let | Letter | :: | 'A' .. 'Z' | 'a' .. 'z' | |
let | HexDigit | :: | '0' .. '9' | Letter | |
let | Digit | :: | '0' .. '9' | |
let | Normal | :: | ||
let | Quote | :: | '\'\"\`\\' | |
tok | Parenthesis | :: | '()[]{}'
| |
let | Special | :: | Printable - Normal - Parenthesis - Quote | |
single byte literals or literals, encoded in us-ascii, ISO 8859-1 Latin-1 or ucs4 hex values | ||||
let | LitChar | :: | Printable - Quote | '\\' ( Quote | 'prnt' | HexDigit HexDigit | 'xX' HexDigit HexDigit HexDigit HexDigit HexDigit HexDigit HexDigit HexDigit ) | |
Comments et al | ||||
com | Comment | :: | ';' { Printable } | |
Complex tokens | ||||
tok | Ide | :: |
| |
tok | Nat | :: | Digit +
| |
tok | Opr | :: | ( Special - ';' ) +
| |
tok | Set | :: | '\'' { LitChar } '\''
| |
tok | Seq | :: | '\"' { LitChar } '\"'
| |
Macro tokens | ||||
let | White | :: | ||
let | Name | :: | ( Letter | "_" ) { Letter | Digit | "_" } | |
let | MPar | :: | ( Printable - ( White | ',' | ')' | '=' ) ) { Printable - ( White | ',' | ')' | '=' ) } | |
tok | MacInc | :: | "#include" White { White } ( Printable - White ) { Printable - White }
| |
tok | MacDel | :: | "#undefine" White { White } Name
| |
tok | MacDfn | :: | "#macro" White { White } Name { White } [ "(" { White } MPar { { White } "," { White } MPar } { White } ")" { White } ] [ "=" ( { Byte } - ( { Byte } ( "#macro" | "#end" ) { Byte } ) ) "#end" ]
| |
tok | MacSep | :: | '\'' ( Byte - '\'' ) [ '-' ]
| |
tok | MacCond | :: | ( ( "#ifdef" | "#ifndef" ) White { White } Name ) | "#else" | "#end"
|
Each rule
is structured as follows: <Rule Type: start or let>
<Rule Identifier> :: <EBNF-konform Expression>
An EBNF-konform expression defines a part
of the language syntax. It consists of a set of alternative productions i.e.
partial expressions, separated by the character '|'.
A production can be spezified with the help of the following elements and operators:
start | Source | :: | Language Ide [ Regular Grammar { QlxDfn } ] [ Context Free Grammar { Cat [ [ err ] ] Ide { Lay Ide : { Mbr } } } ] | |
let | QlxCat | :: | let | ind | ign | com | lan | tok
| |
let | QlxGrp1 | :: | ! | ! Ide
| |
let | Exp | :: |
| |
| | ||||
| | ||||
| | ||||
| | ||||
| | ||||
| | ||||
| | ( Exp ) | |||
| | ||||
| | ||||
| | [ Exp ] | |||
| | Exp + | |||
| | { Exp } | |||
let | QlxDfn | :: | ExGroup Ide
| |
| | InGroup Ide | |||
| | QlxCat [ [ ica ] ] [ : Ide : ] Ide [ QlxGrp1 ] = Exp | |||
let | Cat | :: | xtop | let | start
| |
let | Lay | :: | : | ? | !
| |
let | Mbr | :: |
|