Пример #1
0
        public IXenonASTElement Compile(Lexer Lexer, XenonErrorLogger Logger)
        {
            XenonASTProgram p = new XenonASTProgram();

            // gaurd against empty file
            if (Lexer.InspectEOF())
            {
                Logger.Log(new XenonCompilerMessage()
                {
                    Level = XenonCompilerMessageType.Message, ErrorName = "Empty Project", ErrorMessage = "Program contains no symbols.", Token = Lexer.EOFText
                });
                return(p);
            }
            do
            {
                XenonASTExpression expr = new XenonASTExpression();
                Lexer.GobbleWhitespace();
                expr = (XenonASTExpression)expr.Compile(Lexer, Logger);
                if (expr != null)
                {
                    p.Expressions.Add(expr);
                }
                Lexer.GobbleWhitespace();
            } while (!Lexer.InspectEOF());

            return(p);
        }
        public IXenonASTElement Compile(Lexer Lexer, XenonErrorLogger Logger)
        {
            XenonASTAutoFitImage fullimage = new XenonASTAutoFitImage();

            Lexer.GobbleWhitespace();
            var args = Lexer.ConsumeArgList(false, "asset");

            fullimage.AssetName = args["asset"];

            Lexer.GobbleWhitespace();

            InvertColor = false;
            if (!Lexer.InspectEOF())
            {
                if (Lexer.Inspect("("))
                {
                    Lexer.Consume();
                    string val = Lexer.ConsumeUntil(")");
                    if (val == "true")
                    {
                        fullimage.InvertColor = true;
                    }
                    Lexer.Consume();
                    Lexer.GobbleWhitespace();
                }
            }
            if (!Lexer.InspectEOF())
            {
                if (Lexer.Inspect("["))
                {
                    Lexer.Consume();
                    if (Lexer.Inspect("("))
                    {
                        Lexer.Consume();
                        fullimage.Options = Lexer.ConsumeUntil(")");
                        Lexer.Consume();
                        Lexer.Consume();
                        Lexer.GobbleWhitespace();
                    }
                    else
                    {
                        fullimage.KeyType = Lexer.ConsumeUntil("]");
                        Lexer.Consume();
                        Lexer.GobbleWhitespace();
                    }
                }
            }

            return(fullimage);
        }
        public IXenonASTElement Compile(Lexer Lexer, XenonErrorLogger Logger)
        {
            XenonASTFitImage fullimage = new XenonASTFitImage();

            Lexer.GobbleWhitespace();
            var args = Lexer.ConsumeArgList(false, "asset");

            fullimage.AssetName = args["asset"];
            if (!Lexer.InspectEOF())
            {
                if (Lexer.Inspect("["))
                {
                    Lexer.Consume();
                    fullimage.KeyType = Lexer.ConsumeUntil("]");
                    Lexer.Consume();
                    Lexer.GobbleWhitespace();
                }
            }

            return(fullimage);
        }
        public IXenonASTElement Compile(Lexer Lexer, XenonErrorLogger Logger)
        {
            XenonASTVideo video = new XenonASTVideo();

            Lexer.GobbleWhitespace();
            StringBuilder sb   = new StringBuilder();
            var           args = Lexer.ConsumeArgList(false, "assetname");

            video.AssetName = args["assetname"];
            if (!Lexer.InspectEOF())
            {
                if (Lexer.Inspect("["))
                {
                    Lexer.Consume();
                    video.KeyType = Lexer.ConsumeUntil("]");
                    Lexer.Consume();
                    Lexer.GobbleWhitespace();
                }
            }
            return(video);
        }
        public IXenonASTElement Compile(Lexer Lexer, XenonErrorLogger Logger)
        {
            XenonASTScript script = new XenonASTScript();

            Lexer.GobbleWhitespace();
            StringBuilder sb = new StringBuilder();

            Lexer.GobbleandLog("{");
            Lexer.GobbleWhitespace();
            while (!Lexer.InspectEOF())
            {
                sb.Append(Lexer.Consume());
                if (Lexer.Inspect("}"))
                {
                    script.Source = sb.ToString();
                    Lexer.Consume();
                    break;
                }
            }
            return(script);
        }