module basic/BytesCon %% This modules defines the 'Byte': any character in the 0-255 range. %% %% But.. the syntax definition is not exported. This is too prevent %% everything from being recognized as a byte! %% %% What IS exported are the lexical constructor functions for bytes. %% In this manner, we can construct bytes without having to parse them %% literally. %% %% Note that this module only makes sense in the context of ASF+SDF, %% which supports lexical constructor functions. The definition below %% shows some of the implementation detail of ASF. Do not try this at %% home. hiddens lexical syntax ~[] -> Byte {cons("byte")} Byte* -> Bytes {cons("bytes")} exports sorts Bytes Byte context-free syntax bytes(CHARS[[Byte]]*) -> CHARS[[Bytes]] {cons("bytes"),lexical-constructor} byte (CHARS[[~[]]]) -> CHARS[[Byte]] {cons("byte") ,lexical-constructor} CHARS[[Bytes]] -> Bytes CHARS[[Byte]] -> Byte CHAR -> CHARS[[~[]]]