public string Transform(ModelicaProgram program)
        {
            var sb = new StringBuilder();

            Print(program, sb, 0);
            return(sb.ToString());
        }
        public bool TryParseProgram(string input, out ModelicaProgram prog, out string error, out Position errorPosition)
        {
            var tokens = Tokenizer.TryTokenize(input);

            if (!tokens.HasValue)
            {
                prog          = null;
                error         = tokens.ToString();
                errorPosition = tokens.ErrorPosition;
                return(false);
            }

            var parsed = ProgramRule.TryParse(tokens.Value);

            if (!parsed.HasValue)
            {
                prog          = null;
                error         = parsed.ToString();
                errorPosition = parsed.ErrorPosition;
                return(false);
            }

            prog          = parsed.Value;
            error         = null;
            errorPosition = Position.Empty;
            return(true);
        }