6.8 Example: Type Checking in an Interpreter

As an interpreter has to immediately execute a given program, it should be able to do some preliminary type checking. We take an example of a simple interpretive language. Its grammar is:

program :  funcs END;
funcs   :  func
        |  func funcs
        ;  
func    :  typeid ‘(’ typeids ‘)’ ‘:’ expr ;
typeid  :  INT ID
        |  BOOL ID
        ;  
typeids :  typeid
        |  typeid ‘,’ typeids
        ;
expr    :  NUM
        |  ID
        |  expr ‘+’ expr
        |  expr ‘~’ expr
        |  IF expr THEN expr ELSE expr END
        |  ID ‘(’ exprs ‘)’
        |  LET ID ‘=’ expr IN expr END
        ;  
exprs   :  expr
        |  expr ‘,’ exprs
        ;

It is a small functional language, where the program is made up of function definitions. Each function declares its result type and the types and names of its arguments. Functions and variables have ...

Get Compilers: Principles and Practice now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.