Definitional interpreters for higher-order programming languages

Definitional interpreters for higher-order programming languages

1998 | John C. Reynolds
John C. Reynolds (1998) discusses definitional interpreters for higher-order programming languages. He classifies interpreters based on whether the defining language is higher-order and whether the order of application (call by value vs. call by name) in the defined language depends on that in the defining language. Higher-order languages allow procedures or labels to be used as values, while first-order languages do not. Reynolds examines how these interpreters can be derived from one another through informal but constructive methods. He also discusses the treatment of imperative features like jumps and assignments. The paper introduces a simple applicative language with expressions, evaluation, and values. It defines functions, lambda expressions, and conditional and let expressions. The language is limited to single-argument functions, call by value, simple conditionals, and non-recursive let expressions. The defined language includes integers, booleans, and functions, with basic operations for incrementing and equality testing. Reynolds then presents an abstract syntax for the defining language, using record equations to define sets and functions. He introduces a meta-circular interpreter that evaluates expressions in an environment, using functions like eval and interpret. This interpreter defines the language by using features of the defining language, which can lead to issues with understanding the defined language if the defining language is misunderstood. Reynolds also discusses the elimination of higher-order functions by replacing them with records, allowing the interpreter to handle functions without using functions as values. This transformation involves replacing lambda expressions with record-creation operations and modifying the apply function to interpret these records. The paper concludes with the transformation of the environment set to use interpretive functions, enabling the interpreter to handle environments by applying get functions to variables.John C. Reynolds (1998) discusses definitional interpreters for higher-order programming languages. He classifies interpreters based on whether the defining language is higher-order and whether the order of application (call by value vs. call by name) in the defined language depends on that in the defining language. Higher-order languages allow procedures or labels to be used as values, while first-order languages do not. Reynolds examines how these interpreters can be derived from one another through informal but constructive methods. He also discusses the treatment of imperative features like jumps and assignments. The paper introduces a simple applicative language with expressions, evaluation, and values. It defines functions, lambda expressions, and conditional and let expressions. The language is limited to single-argument functions, call by value, simple conditionals, and non-recursive let expressions. The defined language includes integers, booleans, and functions, with basic operations for incrementing and equality testing. Reynolds then presents an abstract syntax for the defining language, using record equations to define sets and functions. He introduces a meta-circular interpreter that evaluates expressions in an environment, using functions like eval and interpret. This interpreter defines the language by using features of the defining language, which can lead to issues with understanding the defined language if the defining language is misunderstood. Reynolds also discusses the elimination of higher-order functions by replacing them with records, allowing the interpreter to handle functions without using functions as values. This transformation involves replacing lambda expressions with record-creation operations and modifying the apply function to interpret these records. The paper concludes with the transformation of the environment set to use interpretive functions, enabling the interpreter to handle environments by applying get functions to variables.
Reach us at info@study.space