EULER

Euler is a programming language created by Niklaus Wirth and Helmut Weber, conceived as an extension and generalization of ALGOL 60. The designers’ goal was to create a language which was simpler, and yet more flexible, than ALGOL 60 that was a useful programming language processed with reasonable efficiency that can be defined with rigorous formality. Available sources indicate that Euler was operational by 1965.

Euler employs a general type concept. In Euler, arrays, procedures, and switches are not quantities which are declared and named by identifiers: they are not (as opposed to ALGOL) quantities which are on the same level as variables, rather, these quantities are on the level of numeric and boolean constants. Thus, besides the traditional numeric and logical constants, Euler introduces the following additional types:

  • reference
  • label
  • symbol
  • list (array)
  • procedure
  • undefined

All constants can be assigned to variables, which have the same form as in ALGOL, but for which no fixed types are specified: Euler is a dynamically typed programming language. Furthermore, a procedure can produce a value of any type when executed, and this type can vary from one call of the procedure to the next. Similarly, the elements of a list can have values of any type and these can be different from element to element within the list. So, when the list elements are labels, a switch is obtained. If the elements are procedures, a procedure list is obtained (which is not available in ALGOL 60). If the elements are lists themselves, then a general tree structure is obtained. Euler provides general type-test and type-conversion operators.

Sample program

BEGIN NEW FOR; NEW MAKE; NEW T; NEW A;
FOR ~ LQ FORMAL CV; FORMAL LB; FORMAL STEP; FORMAL UB; FORMAL S;
BEGIN
   LABEL L; LABEL K;
   CV ~ LB;
   K:  IF CV { UB THEN S ELSE GOTO L;
   CV ~ CV + STEP;
   GOTO K;
   L: 0
END RQ;

MAKE ~ LQ FORMAL B; FORMAL X;
BEGIN  NEW T; NEW I; NEW F; NEW L;
   L ~ B; T ~ LIST L[1];
   F ~ IF LENGTH L ! 1 THEN MAKE(TAIL L, X) ELSE X;
   FOR (@I, 1, 1, L[1], LQ T[I] ~ F RQ);
   T
END RQ;

   A ~ ();
   FOR (@T, 1, 1, 4, LQ BEGIN A ~ A & (T); OUT MAKE(@A,T) END RQ)
END $
DUMP

Downloads:

EULER Formal Definition, Niklaus Wirth
Source of EULER, 1965
Syntax Processor, Nikluas Wirth, 1964
PDP10 EULER handbook
EULER An Experiment in Language Definiton, Thomas W. Cristopher

See also for an Icon implementation of an Euler compiler/interpreter

Grammar

        PROGRAM
        BLOCK
        BLOKHEAD
        BLOKBODY
        LABDEF
        STAT
        STAT-
        EXPR
        EXPR-
        IFCLAUSE
        TRUEPART
        CATENA
        DISJ
        DISJHEAD
        CONJ
        CONJ-
        CONJHEAD
        NEGATION
        RELATION
        CHOICE
        CHOICE-
        SUM
        SUM-
        TERM
        TERM-
        FACTOR
        FACTOR-
        PRIMARY
        PROCDEF
        PROCHEAD
        LIST*
        LISTHEAD
        REFERENC
        NUMBER
        REAL*
        INTEGER*
        INTEGER-
        DIGIT
        LOGVAL
        VAR
        VAR-
        VARDECL
        FORDECL
        LABDECL
*
        0
        1
        2
        3
        4
        5
        6
        7
        8
        9
        ,
        .
        ;
        :
        @
        NEW
        FORMAL
        LABEL
        IDENT*
        [
        ]
        BEGIN
        END
        (
        )
        LQ
        RQ
        GOTO
        OUT
        ~
        IF
        THEN
        ELSE
        &
        OR
        AND
        NOT
        =
        !
        <
        {
        }
        >
        MIN
        MAX
        +
        -
        |
        /
        %
        MOD
        *
        ABS
        LENGTH
        INTEGER
        REAL
        LOGICAL
        LIST
        TAIL
        IN
        ISB
        ISN
        ISR
        ISL
        ISLI
        ISY
        ISP
        ISU
        SYMBOL*
        UNDEFINE
        TEN
        #
        TRUE
        FALSE
        $
*
 VARDECL           NEW IDENT*                                                001
 FORDECL           FORMAL IDENT*                                             002
 LABDECL           LABEL IDENT*                                              003
 VAR-              IDENT*                                                    004
 VAR-              VAR- [ EXPR ]                                             005
 VAR-              VAR- .                                                    006
 VAR               VAR-                                                      007
 LOGVAL            TRUE                                                      010
 LOGVAL            FALSE                                                     011
 DIGIT             0                                                         012
 DIGIT             1                                                         013
 DIGIT             2                                                         014
 DIGIT             3                                                         015
 DIGIT             4                                                         016
 DIGIT             5                                                         017
 DIGIT             6                                                         020
 DIGIT             7                                                         021
 DIGIT             8                                                         022
 DIGIT             9                                                         023
 INTEGER-          DIGIT                                                     024
 INTEGER-          INTEGER- DIGIT                                            025
 INTEGER*          INTEGER-                                                  026
 REAL*             INTEGER* . INTEGER*                                       027
 REAL*             INTEGER*                                                  030
 NUMBER            REAL*                                                     031
 NUMBER            REAL* TEN INTEGER*                                        032
 NUMBER            REAL* TEN # INTEGER*                                      033
 NUMBER            TEN INTEGER*                                              034
 NUMBER            TEN # INTEGER*                                            035
 REFERENC          @ VAR                                                     036
 LISTHEAD          LISTHEAD EXPR ,                                           037
 LISTHEAD          (                                                         040
 LIST*             LISTHEAD EXPR )                                           041
 LIST*             LISTHEAD )                                                042
 PROCHEAD          PROCHEAD FORDECL ;                                        043
 PROCHEAD          LQ                                                        044
 PROCDEF           PROCHEAD EXPR RQ                                          045
 PRIMARY           VAR                                                       046
 PRIMARY           VAR LIST*                                                 047
 PRIMARY           LOGVAL                                                    050
 PRIMARY           NUMBER                                                    051
 PRIMARY           SYMBOL*                                                   052
 PRIMARY           REFERENC                                                  053
 PRIMARY           LIST*                                                     054
 PRIMARY           TAIL PRIMARY                                              055
 PRIMARY           PROCDEF                                                   056
 PRIMARY           UNDEFINE                                                  057
 PRIMARY           [ EXPR ]                                                  060
 PRIMARY           IN                                                        061
 PRIMARY           ISB VAR                                                   062
 PRIMARY           ISN VAR                                                   063
 PRIMARY           ISR VAR                                                   064
 PRIMARY           ISL VAR                                                   065
 PRIMARY           ISLI VAR                                                  066
 PRIMARY           ISY VAR                                                   067
 PRIMARY           ISP VAR                                                   070
 PRIMARY           ISU VAR                                                   071
 PRIMARY           ABS PRIMARY                                               072
 PRIMARY           LENGTH VAR                                                073
 PRIMARY           INTEGER PRIMARY                                           074
 PRIMARY           REAL PRIMARY                                              075
 PRIMARY           LOGICAL PRIMARY                                           076
 PRIMARY           LIST PRIMARY                                              077
 FACTOR-           PRIMARY                                                   100
 FACTOR-           FACTOR- * PRIMARY                                         101
 FACTOR            FACTOR-                                                   102
 TERM-             FACTOR                                                    103
 TERM-             TERM- | FACTOR                                            104
 TERM-             TERM- / FACTOR                                            105
 TERM-             TERM- % FACTOR                                            106
 TERM-             TERM- MOD FACTOR                                          107
 TERM              TERM-                                                     110
 SUM-              TERM                                                      111
 SUM-              + TERM                                                    112
 SUM-              - TERM                                                    113
 SUM-              SUM- + TERM                                               114
 SUM-              SUM- - TERM                                               115
 SUM               SUM-                                                      116
 CHOICE-           SUM                                                       117
 CHOICE-           CHOICE- MIN SUM                                           120
 CHOICE-           CHOICE- MAX SUM                                           121
 CHOICE            CHOICE-                                                   122
 RELATION          CHOICE                                                    123
 RELATION          CHOICE = CHOICE                                           124
 RELATION          CHOICE ! CHOICE                                           125
 RELATION          CHOICE < CHOICE                                           126
 RELATION          CHOICE { CHOICE                                           127
 RELATION          CHOICE } CHOICE                                           130
 RELATION          CHOICE > CHOICE                                           131
 NEGATION          RELATION                                                  132
 NEGATION          NOT RELATION                                              133
 CONJHEAD          NEGATION AND                                              134
 CONJ-             CONJHEAD CONJ-                                            135
 CONJ-             NEGATION                                                  136
 CONJ              CONJ-                                                     137
 DISJHEAD          CONJ OR                                                   140
 DISJ              DISJHEAD DISJ                                             141
 DISJ              CONJ                                                      142
 CATENA            CATENA & PRIMARY                                          143
 CATENA            DISJ                                                      144
 TRUEPART          EXPR ELSE                                                 145
 IFCLAUSE          IF EXPR THEN                                              146
 EXPR-             BLOCK                                                     147
 EXPR-             IFCLAUSE TRUEPART EXPR-                                   150
 EXPR-             VAR ~ EXPR-                                               151
 EXPR-             GOTO PRIMARY                                              152
 EXPR-             OUT EXPR-                                                 153
 EXPR-             CATENA                                                    154
 EXPR              EXPR-                                                     155
 STAT-             LABDEF STAT-                                              156
 STAT-             EXPR                                                      157
 STAT              STAT-                                                     160
 LABDEF            IDENT* :                                                  161
 BLOKHEAD          BEGIN                                                     162
 BLOKHEAD          BLOKHEAD VARDECL ;                                        163
 BLOKHEAD          BLOKHEAD LABDECL ;                                        164
 BLOKBODY          BLOKHEAD                                                  165
 BLOKBODY          BLOKBODY STAT ;                                           166
 BLOCK             BLOKBODY STAT END                                         167
 PROGRAM           $ BLOCK $                                                 170
*