(TranslationUnit
    [(Program
        program_01
        ()
        []
        [(ImplicitNone
            []
            ()
        )]
        [(Declaration
            (AttrType
                TypeInteger
                []
                ()
                ()
                None
            )
            [(SimpleAttribute
                AttrParameter
            )]
            [(dp
            []
            []
            ()
            (FuncCallOrArray
                kind
                []
                [(()
                (Real "0.d0")
                ()
                0)]
                []
                []
                []
            )
            Equal
            ())]
            ()
        )
        (Declaration
            (AttrType
                TypeReal
                [(()
                dp
                Value)]
                ()
                ()
                None
            )
            []
            [(a
            []
            []
            ()
            ()
            None
            ())]
            ()
        )
        (Declaration
            (AttrType
                TypeInteger
                []
                ()
                ()
                None
            )
            []
            [(i
            []
            []
            ()
            ()
            None
            ())]
            ()
        )]
        [(Print
            0
            ()
            [(String "Normal random numbers:" ())]
            ()
        )
        (DoLoop
            0
            ()
            0
            i
            1
            10
            ()
            [(SubroutineCall
                0
                rand
                []
                [(()
                a
                ()
                0)]
                []
                []
                ()
            )
            (Print
                0
                ()
                [a]
                ()
            )]
            ()
            (TriviaNode
                []
                [(EndOfLine)
                (EndOfLine)]
            )
        )]
        [(Subroutine
            rand
            [(x)]
            []
            ()
            (TriviaNode
                [(EndOfLine)
                (Comment
                    "! Returns a psuedorandom scalar drawn from the standard normal distribution."
                )
                (Comment
                    "!"
                )
                (Comment
                    "! [1] Marsaglia, G., & Bray, T. A. (1964). A Convenient Method for"
                )
                (Comment
                    "!       Generating Normal Variables. SIAM Review, 6(3), 260–264."
                )]
                [(EndOfLine)
                (EndOfLine)]
            )
            []
            []
            []
            [(Declaration
                (AttrType
                    TypeReal
                    [(()
                    dp
                    Value)]
                    ()
                    ()
                    None
                )
                [(AttrIntent
                    Out
                )]
                [(x
                []
                []
                ()
                ()
                None
                ())]
                ()
            )
            (Declaration
                (AttrType
                    TypeLogical
                    []
                    ()
                    ()
                    None
                )
                [(SimpleAttribute
                    AttrSave
                )]
                [(first
                []
                []
                ()
                (Logical .true. ())
                Equal
                ())]
                ()
            )
            (Declaration
                (AttrType
                    TypeReal
                    [(()
                    dp
                    Value)]
                    ()
                    ()
                    None
                )
                [(SimpleAttribute
                    AttrSave
                )]
                [(u
                [(1
                2
                DimensionExpr)]
                []
                ()
                ()
                None
                ())]
                ()
            )
            (Declaration
                (AttrType
                    TypeReal
                    [(()
                    dp
                    Value)]
                    ()
                    ()
                    None
                )
                []
                [(r2
                []
                []
                ()
                ()
                None
                ())]
                ()
            )]
            [(If
                0
                ()
                first
                [(DoLoop
                    0
                    ()
                    0
                    ()
                    ()
                    ()
                    ()
                    [(SubroutineCall
                        0
                        random_number
                        []
                        [(()
                        u
                        ()
                        0)]
                        []
                        []
                        ()
                    )
                    (Assignment
                        0
                        u
                        (- (* 2 u) 1)
                        ()
                    )
                    (Assignment
                        0
                        r2
                        (FuncCallOrArray
                            sum
                            []
                            [(()
                            (** u 2)
                            ()
                            0)]
                            []
                            []
                            []
                        )
                        ()
                    )
                    (If
                        0
                        ()
                        (BoolOp
                            (< r2 1)
                            And
                            (> r2 0)
                        )
                        [(Exit
                            0
                            ()
                            ()
                        )]
                        []
                        ()
                        ()
                        ()
                    )]
                    ()
                    ()
                )
                (Assignment
                    0
                    u
                    (* u (FuncCallOrArray
                        sqrt
                        []
                        [(()
                        (/ (* (u- 2) (FuncCallOrArray
                            log
                            []
                            [(()
                            r2
                            ()
                            0)]
                            []
                            []
                            []
                        )) r2)
                        ()
                        0)]
                        []
                        []
                        []
                    ))
                    ()
                )
                (Assignment
                    0
                    x
                    (FuncCallOrArray
                        u
                        []
                        [(()
                        1
                        ()
                        0)]
                        []
                        []
                        []
                    )
                    ()
                )]
                [(Assignment
                    0
                    x
                    (FuncCallOrArray
                        u
                        []
                        [(()
                        2
                        ()
                        0)]
                        []
                        []
                        []
                    )
                    ()
                )]
                ()
                ()
                ()
            )
            (Assignment
                0
                first
                (not first)
                ()
            )]
            []
            []
        )]
    )]
)
