tools/pas2c.hs
changeset 6450 14224c9b4594
parent 6425 1ef4192aa80d
child 6453 11c578d30bd3
equal deleted inserted replaced
6448:88e49851d814 6450:14224c9b4594
   129 type2C (ArrayDecl r t) = text "<<array type>>"
   129 type2C (ArrayDecl r t) = text "<<array type>>"
   130 
   130 
   131 
   131 
   132 phrase2C :: Phrase -> Doc
   132 phrase2C :: Phrase -> Doc
   133 phrase2C (Phrases p) = text "{" $+$ (nest 4 . vcat . map phrase2C $ p) $+$ text "}"
   133 phrase2C (Phrases p) = text "{" $+$ (nest 4 . vcat . map phrase2C $ p) $+$ text "}"
   134 phrase2C (ProcCall (Identifier name) params) = text name <> parens (hsep . punctuate (char ',') . map expr2C $ params) <> semi
   134 phrase2C (ProcCall ref params) = ref2C ref <> parens (hsep . punctuate (char ',') . map expr2C $ params) <> semi
   135 phrase2C (IfThenElse (expr) phrase1 mphrase2) = text "if" <> parens (expr2C expr) $+$ (phrase2C . wrapPhrase) phrase1 $+$ elsePart
   135 phrase2C (IfThenElse (expr) phrase1 mphrase2) = text "if" <> parens (expr2C expr) $+$ (phrase2C . wrapPhrase) phrase1 $+$ elsePart
   136     where
   136     where
   137     elsePart | isNothing mphrase2 = empty
   137     elsePart | isNothing mphrase2 = empty
   138              | otherwise = text "else" $$ (phrase2C . wrapPhrase) (fromJust mphrase2)
   138              | otherwise = text "else" $$ (phrase2C . wrapPhrase) (fromJust mphrase2)
   139 phrase2C (Assignment ref expr) = ref2C ref <> text " = " <> expr2C expr <> semi
   139 phrase2C (Assignment ref expr) = ref2C ref <> text " = " <> expr2C expr <> semi
   140 phrase2C (WhileCycle expr phrase) = text "while" <> parens (expr2C expr) $$ (phrase2C $ wrapPhrase phrase)
   140 phrase2C (WhileCycle expr phrase) = text "while" <> parens (expr2C expr) $$ (phrase2C $ wrapPhrase phrase)
   141 phrase2C (SwitchCase expr cases mphrase) = text "switch" <> parens (expr2C expr) <> text "of" $+$ (nest 4 . vcat . map case2C) cases
   141 phrase2C (SwitchCase expr cases mphrase) = text "switch" <> parens (expr2C expr) <> text "of" $+$ (nest 4 . vcat . map case2C) cases
   142     where
   142     where
   143     case2C :: ([Expression], Phrase) -> Doc
   143     case2C :: ([InitExpression], Phrase) -> Doc
   144     case2C (e, p) = text "case" <+> parens (hsep . punctuate (char ',') . map expr2C $ e) <> char ':' <> nest 4 (phrase2C p $+$ text "break;")
   144     case2C (e, p) = text "case" <+> parens (hsep . punctuate (char ',') . map initExpr2C $ e) <> char ':' <> nest 4 (phrase2C p $+$ text "break;")
   145 phrase2C (WithBlock ref p) = text "namespace" <> parens (ref2C ref) $$ (phrase2C $ wrapPhrase p)
   145 phrase2C (WithBlock ref p) = text "namespace" <> parens (ref2C ref) $$ (phrase2C $ wrapPhrase p)
   146 phrase2C (ForCycle (Identifier i) e1 e2 p) = 
   146 phrase2C (ForCycle (Identifier i) e1 e2 p) = 
   147     text "for" <> (parens . hsep . punctuate (char ';') $ [text i <+> text "=" <+> expr2C e1, text i <+> text "<=" <+> expr2C e2, text "++" <> text i])
   147     text "for" <> (parens . hsep . punctuate (char ';') $ [text i <+> text "=" <+> expr2C e1, text i <+> text "<=" <+> expr2C e2, text "++" <> text i])
   148     $$
   148     $$
   149     phrase2C (wrapPhrase p)
   149     phrase2C (wrapPhrase p)