私は 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
(そのようにしてパイプライン全体を実行する必要があります) )。
あなたの助けを願っています!