コード例 #1
0
        public static ISExpression[] Parse(string input)
        {
            AntlrInputStream  inputStream       = new AntlrInputStream(input);
            SchemeLexer       lexer             = new SchemeLexer(inputStream);
            CommonTokenStream commonTokenStream = new CommonTokenStream(lexer);
            SchemeParser      parser            = new SchemeParser(commonTokenStream);

            var context = parser.body();
            var visitor = new SchemeVisitor();
            var expr    = visitor.Visit(context);

            ISExpression[] arr;
            if (expr is ISExpression)
            {
                arr = new ISExpression[] { (ISExpression)expr }
            }
            ;
            else if (expr is ISExpression[])
            {
                arr = (ISExpression[])expr;
            }
            else
            {
                throw new InvalidOperationException("parser error, unknown type: " + expr.GetType().Name);
            }

            return(arr);
        }
コード例 #2
0
ファイル: UnitTest1.cs プロジェクト: pu4kov/MosMetroPath
        public void TestVisitAllLines()
        {
            var routes = new SchemeVisitor().VisitAllLines(Scheme);

            foreach (var r in routes)
            {
                WriteRoute(r);
            }
        }
コード例 #3
0
ファイル: UnitTest1.cs プロジェクト: pu4kov/MosMetroPath
        public void TestVisitAllLinesByBranchAndBound()
        {
            var routes = new SchemeVisitor().VisitAllLinesByBranchAndBound(Scheme);

            foreach (var r in routes)
            {
                WriteRoute(r);
            }
        }
コード例 #4
0
ファイル: UnitTest1.cs プロジェクト: pu4kov/MosMetroPath
        public void TestFindRoute()
        {
            var from = Scheme.GetStations()
                       .Where(s => s.Name == @"Бунинская аллея").First();
            var to = Scheme.GetStations()
                     .Where(s => s.Name == @"Алтуфьево").First();
            var route = new SchemeVisitor().FindRoute(from, to);

            WriteRoute(route);
        }
コード例 #5
0
ファイル: UnitTest1.cs プロジェクト: pu4kov/MosMetroPath
        public void TestRoute()
        {
            var scheme = new Scheme();
            var line1  = scheme.AddLine(@"line1");
            var line2  = scheme.AddLine(@"line2");
            var line3  = scheme.AddLine(@"line3");
            var line4  = scheme.AddLine(@"line4");
            var line5  = scheme.AddLine(@"line5");
            var s1     = line1.AddStation(@"s1");
            var s2     = line2.AddStation(@"s2");
            var s3     = line3.AddStation(@"s3");
            var s4     = line4.AddStation(@"s4");
            var s5     = line5.AddStation(@"s5");
            var s1s2   = scheme.AddRelation(s1, s2, 20);
            var s1s3   = scheme.AddRelation(s1, s3, 18);
            var s1s4   = scheme.AddRelation(s1, s4, 12);
            var s1s5   = scheme.AddRelation(s1, s4, 8);
            var s2s3   = scheme.AddRelation(s2, s3, 14);
            var s2s4   = scheme.AddRelation(s2, s4, 7);
            var s2s5   = scheme.AddRelation(s2, s5, 11);
            var s3s4   = scheme.AddRelation(s3, s4, 6);
            var s3s5   = scheme.AddRelation(s3, s5, 11);
            var s4s5   = scheme.AddRelation(s4, s5, 12);

            var routes = new List <IRoute>();

            routes.Add(s1s2);
            routes.Add(s1s3);
            routes.Add(s1s4);
            routes.Add(s1s5);
            routes.Add(s2s3);
            routes.Add(s2s4);
            routes.Add(s2s5);
            routes.Add(s3s4);
            routes.Add(s3s5);
            routes.Add(s4s5);

            var r = new SchemeVisitor().VisitAllLinesByBranchAndBound(scheme);
        }