CS计算机代考程序代写 Haskell interpreter add more handouts and update index

add more handouts and update index

mhe authored 1 month ago

Runxy.md 2.18 KB

Runxy

This command line interface allows to run e.g.

$ runhaskell Runxy.hs factorial.xy 5

120

for the file factorial.xy. The usage is

runhaskell Runxy.hs

Alternatively, for faster execution time, you can compile Runxy.hs with

$ ghc –make Runxy.hs

and then run it with

$ ./Runxy

You can also use optimization options, such as

$ ghc –make -O2 Runxy.hs

We name the module Main even though the file is called Runxy.hs , so that we can compile to produce an executable as explained above:

module Main where

import System.Environment

We import the module System.Environment so that we can read the command line arguments with getArgs . We also need to import our own

modules:

import AbstractSyntax

import Parser

import Interpreter

Because our little language doesn’t have IO facilities, we use the variable x to hold the input and the variable y to hold the output. So this function

creates a storage with the value x for the variable “x” , and with all other variables uninitialized, giving an error if we try to use them:

initialStorage :: Integer -> Storage

initialStorage x = update “x” x emptyStorage

Now, given a program in abstract syntax and a value for x , we run it with the above interpreter, and extract the value of the variable “y” .

runxy :: Program -> Integer -> Integer

runxy p x = m’ “y”

where

m = initialStorage x

m’ = run p m

Finally, the main function reads the command line arguments with getArgs , then uses the module Parser to parse the file, and the module

Interpreter to run the syntax tree produced by the parser on the given integer:

main :: IO()

main =

7845144f

do

args <- getArgs if length args == 2 then do concreteProgram <- readFile (args !! 0) let abstractProgram = parseProgram concreteProgram let x = read(args !! 1) let y = runxy abstractProgram x putStrLn (show y) else putStrLn "Usage: runhaskell Runxy.hs

Back to table of contents