0

私は Haskell で rail-compiler (rail は難解な言語です) を書いています。

1) 別のコンパイラが AST (Abstract Synatx Tree) を処理できるように、コンパイル パイプラインを実行するか、レクサーの後で停止して AST をファイルに書き込むかをプログラムに尋ねさせます。これが私のプログラムです:

module Main (
             main   -- main function to run the program
            )
 where

 -- imports --
 import InterfaceDT as IDT
 import qualified Testing as Test
 import qualified Preprocessor as PreProc
 import qualified Lexer
 import qualified SyntacticalAnalysis as SynAna
 import qualified SemanticalAnalysis as SemAna
 import qualified IntermediateCode as InterCode
 import qualified CodeOptimization as CodeOpt
 import qualified Backend

 -- functions --
 main :: IO()
 main = do putStr "Enter inputfile (path): "
           inputfile <- getLine
           input <- readFile inputfile
           putStr "Enter outputfile (path): "
           outputfile <- getLine
           input <- readFile inputfile

           putStr "Only create AST (True/False): "
           onlyAST <- getLine
           when (onlyAST=="True") do putStrLn "Building AST..."
                                     writeFile outputfile ((Lexer.process . PreProc.process) input)
           when (onlyAST=="False") do putStrLn ("Compiling "++inputfile++" to "++outputfile)
                                      writeFile outputfile ((Backend.process . CodeOpt.process . InterCode.process . SemAna.process . SynAna.process . Lexer.process . PreProc.process) input)

が原因で 21 行目 ( input <- readFile inputfile) でエラーが発生し<-ます。なんで?

どうすればいいですか?

2)次のことは、プログラムをそのようにリファクタリングしたいということです。端末からパラメーターを使用して呼び出すことができますrunhaskell Main(AST)(そのようにしてASTを作成する必要があります)またはrunhaskell Main.hs(そのようにしてパイプライン全体を実行する必要があります) )。

あなたの助けを願っています!

4

1 に答える 1