Ejemplo n.º 1
0
        public static void Parse()
        {
            var message = File.ReadAllText(@"..\..\..\..\messages\test.txt");
            var parser  = new AlienMessageParser(message);

            parser.Eval();
        }
Ejemplo n.º 2
0
        public static IToken Acquire(IToken arg0, IToken arg1, IToken arg2 = null)
        {
            var key = Tuple.Create(arg0, arg1, arg2);

            if (Cache.TryGetValue(key, out var cached))
            {
                return(cached);
            }

            IToken x;

            if (arg1 == null)
            {
                x = new ConsOperator(arg0, arg1);
            }
            else if (arg2 == null)
            {
                var a0 = AlienMessageParser.Reduce(arg0);
                var a1 = AlienMessageParser.Reduce(arg1);
                x = new ConsOperator(a0, a1);
            }
            else
            {
                x = ApOperator.Acquire(ApOperator.Acquire(arg2, arg0), arg1);
            }

            Cache[key] = x;
            return(x);
        }
Ejemplo n.º 3
0
        private static IToken Acquire(IToken arg0, IToken arg1)
        {
            var key = Tuple.Create(arg0, arg1);

            if (Cache.TryGetValue(key, out var cached))
            {
                return(cached);
            }

            IToken x;

            if (arg1 == null)
            {
                x = new AddOperator(arg0);
            }
            else
            {
                var x0 = AlienMessageParser.Reduce(arg0);
                var x1 = AlienMessageParser.Reduce(arg1);
                x = ConstantOperator.Acquire(x0.AsValue() + x1.AsValue());
            }

            Cache[key] = x;
            return(x);
        }
Ejemplo n.º 4
0
        public IToken Apply(IToken arg)
        {
            if (Protocol == null)
            {
                return(new InteractOperator(arg));
            }

            if (State == null)
            {
                return(new InteractOperator(Protocol, arg));
            }

            var Vector = AlienMessageParser.Reduce(arg);

            var p1 = AlienMessageParser.Reduce(Protocol.Apply(State));
            var p2 = AlienMessageParser.Reduce(p1.Apply(Vector));

            var flag     = p2.Car().AsValue();
            var newState = IToken.Dem(p2.Cdr().Car().Mod());
            var data     = p2.Cdr().Cdr().Car();

            if (flag != 0)
            {
                var s = new SendOperator();
                var v = s.Apply(data);
                return(new InteractOperator(Protocol, newState).Apply(v));
            }

            AlienMessageParser.lastInteractResult = data;

            Debug.Assert(p2.Cdr().Cdr().Cdr() is NilOperator);

            return(new InteractOperator(Protocol, newState));
        }
Ejemplo n.º 5
0
        public IToken Apply(IToken arg)
        {
            if (x0 == null)
            {
                return(Acquire(arg));
            }

            x0 = AlienMessageParser.Reduce(x0);
            var x1 = AlienMessageParser.Reduce(arg);

            return(ConstantOperator.Acquire(x0.AsValue() * x1.AsValue()));
        }
Ejemplo n.º 6
0
        public IToken Apply(IToken arg)
        {
            if (x0 == null)
            {
                return(Acquire(arg));
            }

            x0 = AlienMessageParser.Reduce(x0);
            var x1 = AlienMessageParser.Reduce(arg);

            return(ConstantOperator.Acquire(decimal.Round(x0.AsValue() / x1.AsValue(), MidpointRounding.ToZero)));
        }
Ejemplo n.º 7
0
        public ContestForm()
        {
            InitializeComponent();
            var message = File.ReadAllText(@"..\..\..\..\messages\test.txt");

            Parser = new AlienMessageParser(message);
            Parser.Eval();
            PlayField = new List <Bitmap> {
                new Bitmap(1, 1)
            };
            LoadColors();
            DisplayColorList();
            RedrawPlayfield(Parser.SkipToUniverse());
        }
Ejemplo n.º 8
0
        public IToken Apply(IToken arg)
        {
            var x0 = AlienMessageParser.Reduce(arg);

            if (x0 is NilOperator)
            {
                return(KComb.Acquire());
            }
            else if (x0 is ConsOperator)
            {
                return(FComb.Acquire());
            }
            else
            {
                throw new InvalidOperationException();
            }
        }
Ejemplo n.º 9
0
        private static IToken Acquire(IToken arg0, IToken arg1, IToken arg2)
        {
            var key = Tuple.Create(arg0, arg1, arg2);

            if (Cache.TryGetValue(key, out var cached))
            {
                return(cached);
            }

            IToken x;

            if (arg2 == null)
            {
                x = new CComb(arg0, arg1);
            }
            else
            {
                x = AlienMessageParser.Reduce(ApOperator.Acquire(ApOperator.Acquire(arg0, arg2), arg1));
            }

            Cache[key] = x;
            return(x);
        }
Ejemplo n.º 10
0
        public IToken Apply(IToken arg)
        {
            var x0 = AlienMessageParser.Reduce(arg);

            return(arg);
        }
Ejemplo n.º 11
0
        public IToken Apply(IToken arg)
        {
            var x0 = AlienMessageParser.Reduce(arg);

            return(ConstantOperator.Acquire(x0.AsValue() - 1));
        }
Ejemplo n.º 12
0
 private void btnCacheKill_Click(object sender, System.EventArgs e)
 {
     AlienMessageParser.ClearCaches();
 }
Ejemplo n.º 13
0
 public static IToken Reduce(this IToken token)
 {
     return(AlienMessageParser.Reduce(token));
 }
Ejemplo n.º 14
0
        public IToken Apply(IToken arg)
        {
            var x0 = AlienMessageParser.Reduce(arg);

            return((x0 as ConsOperator).x1);
        }