Worthy characters (The GNU Algol 68 Compiler)

### 5.2 Worthy characters ¶

The syntactic marks of a representation language, both symbols and typographical display features, are realized as a set of worthy characters and the newline. Effectively, an Algol 68 program is a sequence of worthy characters and newlines. The worthy characters are:

    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
    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
    0 1 2 3 4 5 6 7 8 9
    space tab " # $ % & ' ( ) * + , - . / : ; < = >  @ [ \ ]
    ^ _ |  ! ? ~ { }

Some of the characters above were considered unworthy by the original Standard Hardware Representation:

`!`

  It was considered unworthy because many installations didn’t have a vertical bar base character, and `!` was used as a base character for `|`. Today every computer system features a vertical bar character, so `!` can qualify as a worthy character.

`&`

  The Revised Report specifies that `&` is a monad, used as a symbol for the dyadic `and` operator. The Standard Hardware representation decided to turn it into an unworthy character, motivated by the fact that no nomads existed for the other logical operators `not` and `or`, and also with the goal of maintaining the set of worthy characters as small as possible to improve portability. Recognizing that the first motivation still holds, but not the second, this compiler re-instates `&` as a monad but doesn’t use it as an alternative representation of the `and` operator.

`~`

  The Standard Hardware Representation vaguely cites some “severe difficulties” with the hardware representation of the tilde character. Whatever these difficulties were at the time, they surely don’t exist anymore. This compiler therefore recognizes `~` as a worthy character, and is used as a monad.

`?`

  The question mark character was omitted as a worthy character to limit the size of the worthy set. This compiler recognizes `?` as a worthy character, and is used as a monad.

`\`

  Back-slash wasn’t included as a worthy character because back in 1975 it wasn’t supported in EBCDIC (it is now). This compiler recognizes `\` as a worthy character.

`tab`

  This compiler recognizes the tabulator character as a worthy character, and it is used as a typographical display feature.