tools/pas2c.hs
changeset 7038 d853e4385241
parent 7037 7edce323558f
child 7039 e7dc6ddd1e29
equal deleted inserted replaced
7037:7edce323558f 7038:d853e4385241
   636     p <- phrase2C (Phrases p')
   636     p <- phrase2C (Phrases p')
   637     return $ text "do" <+> p <+> text "while" <> parens (text "!" <> parens e) <> semi
   637     return $ text "do" <+> p <+> text "while" <> parens (text "!" <> parens e) <> semi
   638 phrase2C NOP = return $ text ";"
   638 phrase2C NOP = return $ text ";"
   639 
   639 
   640 phrase2C (BuiltInFunctionCall [] (SimpleReference (Identifier "exit" BTUnknown))) = return $ text "return" <> semi
   640 phrase2C (BuiltInFunctionCall [] (SimpleReference (Identifier "exit" BTUnknown))) = return $ text "return" <> semi
       
   641 phrase2C (BuiltInFunctionCall [] (SimpleReference (Identifier "break" BTUnknown))) = return $ text "break" <> semi
   641 phrase2C (BuiltInFunctionCall [e] (SimpleReference (Identifier "exit" BTUnknown))) = liftM (\e -> text "return" <+> e <> semi) $ expr2C e
   642 phrase2C (BuiltInFunctionCall [e] (SimpleReference (Identifier "exit" BTUnknown))) = liftM (\e -> text "return" <+> e <> semi) $ expr2C e
   642 phrase2C (BuiltInFunctionCall [e] (SimpleReference (Identifier "dec" BTUnknown))) = liftM (\e -> text "--" <> e <> semi) $ expr2C e
   643 phrase2C (BuiltInFunctionCall [e] (SimpleReference (Identifier "dec" BTUnknown))) = liftM (\e -> text "--" <> e <> semi) $ expr2C e
   643 phrase2C (BuiltInFunctionCall [e1, e2] (SimpleReference (Identifier "dec" BTUnknown))) = liftM2 (\a b -> a <> text " -= " <> b <> semi) (expr2C e1) (expr2C e2)
   644 phrase2C (BuiltInFunctionCall [e1, e2] (SimpleReference (Identifier "dec" BTUnknown))) = liftM2 (\a b -> a <> text " -= " <> b <> semi) (expr2C e1) (expr2C e2)
   644 phrase2C (BuiltInFunctionCall [e] (SimpleReference (Identifier "inc" BTUnknown))) = liftM (\e -> text "++" <> e <> semi) $ expr2C e
   645 phrase2C (BuiltInFunctionCall [e] (SimpleReference (Identifier "inc" BTUnknown))) = liftM (\e -> text "++" <> e <> semi) $ expr2C e
   645 phrase2C (BuiltInFunctionCall [e1, e2] (SimpleReference (Identifier "inc" BTUnknown))) = liftM2 (\a b -> a <+> text "+=" <+> b <> semi) (expr2C e1) (expr2C e2)
   646 phrase2C (BuiltInFunctionCall [e1, e2] (SimpleReference (Identifier "inc" BTUnknown))) = liftM2 (\a b -> a <+> text "+=" <+> b <> semi) (expr2C e1) (expr2C e2)
   800     case map toLower i of
   801     case map toLower i of
   801         "pchar" -> ref2C $ FunCall [expr] (SimpleReference (Identifier "_pchar" $ BTPointerTo BTChar))
   802         "pchar" -> ref2C $ FunCall [expr] (SimpleReference (Identifier "_pchar" $ BTPointerTo BTChar))
   802         a -> do
   803         a -> do
   803             e <- expr2C expr
   804             e <- expr2C expr
   804             t <- id2C IOLookup t'    
   805             t <- id2C IOLookup t'    
   805             return $ parens t <> e
   806             return . parens $ parens t <> e
   806 ref2C (RefExpression expr) = expr2C expr
   807 ref2C (RefExpression expr) = expr2C expr
   807 
   808 
   808 
   809 
   809 op2C :: String -> String
   810 op2C :: String -> String
   810 op2C "or" = "|"
   811 op2C "or" = "|"