我正在用 Haskell 编写 rail-compiler(rail 是一种深奥的语言),我在 mainmodule 的 main-function 中遇到了一些问题。
1)我希望我的程序询问我是要运行编译管道还是只是在词法分析器之后停止并将 AST 写入文件,以便另一个编译器可以处理我的 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
(这样它应该完成整个管道)。
我希望能得到你的帮助!