Ejemplo n.º 1
0
        public Func <bool> Eval(Pointer pointer, string code, out int size)
        {
            RunicEnvironment context;
            ParseError       err = Parser.Parse(code, "", out context);

            if (modifiers[pointer.position.x, pointer.position.y] == '͍')
            {
                context.SetReader(() =>
                {
                    if (pointer.GetStackSize() > 0)
                    {
                        return(pointer.Pop());
                    }
                    return(null);
                });
                context.SetWriter((o) =>
                {
                    pointer.Push(o);
                });
            }
            else
            {
                context.SetWriter((o) =>
                {
                    outputWriter(o);
                });
            }
            if (err.type != ParseErrorType.NONE || context == null)
            {
                size = 0;
                return(() => true);
            }
            context.Initialize();
            size = context.runes.GetLength(0) + context.runes.GetLength(1);
            return(() =>
            {
                bool continueExecuting = false;
                continueExecuting = context.Tick();
                return !continueExecuting;
            });
        }
Ejemplo n.º 2
0
        public override ExecutionEnvironment Compile(string source, string input)
        {
            RunicEnvironment ctx;
            ParseError       err = Parser.Parse(source, input, out ctx);

            if (err.type != ParseErrorType.NONE)
            {
                StringBuilder sb = new StringBuilder("Parser error: ");
                sb.Append(err.type.ToString());
                sb.Append(" at position ");
                sb.Append(err.pos);
                sb.Append(", character '");
                UnicodeCategory uc = CharUnicodeInfo.GetUnicodeCategory(err.character);
                if (uc == UnicodeCategory.NonSpacingMark || uc == UnicodeCategory.EnclosingMark)
                {
                    sb.Append('◌');
                }
                sb.Append(err.character);
                sb.Append("'");
                throw new CompileException(sb.ToString(), err.pos1d, 1);
            }
            ctx.Initialize();
            return(ctx);
        }