Beispiel #1
0
        public static MExpr Start(ParseResult parse_result)
        {
            var   list = parse_result.TopExprs.Reverse <MTopExpr>();
            MExpr expr = new MUnit("");

            foreach (var topexpr in list)
            {
                if (topexpr is MUserTypeDef)
                {
                    // 何もしない
                }
                else if (topexpr is MTopDo)
                {
                    var top = (MTopDo)topexpr;
                    expr = new MDo(top.Pos, top.Expr, expr);
                }
                else if (topexpr is MTopLet)
                {
                    var top = (MTopLet)topexpr;
                    expr = new MLet(top.Pos, top.Pat, top.Expr, expr);
                }
                else if (topexpr is MTopFun)
                {
                    var top = (MTopFun)topexpr;
                    expr = new MFun(top.Pos, top.Items, expr);
                }
                else
                {
                    throw new NotImplementedException();
                }
            }

            return(expr);
        }
Beispiel #2
0
        static MSet <string> FunPats(MFun expr)
        {
            var pats = new MSet <string>();

            foreach (var item in expr.Items)
            {
                pats = pats.Union(new MSet <string>(item.Name));
            }

            return(pats);
        }