public static void Parse() { var message = File.ReadAllText(@"..\..\..\..\messages\test.txt"); var parser = new AlienMessageParser(message); parser.Eval(); }
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); }
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); }
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)); }
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())); }
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))); }
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()); }
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(); } }
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); }
public IToken Apply(IToken arg) { var x0 = AlienMessageParser.Reduce(arg); return(arg); }
public IToken Apply(IToken arg) { var x0 = AlienMessageParser.Reduce(arg); return(ConstantOperator.Acquire(x0.AsValue() - 1)); }
private void btnCacheKill_Click(object sender, System.EventArgs e) { AlienMessageParser.ClearCaches(); }
public static IToken Reduce(this IToken token) { return(AlienMessageParser.Reduce(token)); }
public IToken Apply(IToken arg) { var x0 = AlienMessageParser.Reduce(arg); return((x0 as ConsOperator).x1); }