예제 #1
0
파일: Let.cs 프로젝트: KM198912/RetroBasic
        private static Let NewMethod(Input input)
        {
            if (input.Pop(new List <string> {
                Keyword
            }) == null)
            {
                return(null);
            }
            var var = Var.Parse(input);

            if (var == null)
            {
                Console.WriteLine(MessageFormatter.Expected("var"));
                return(null);
            }
            if (input.Pop(new List <string> {
                "="
            }) == null)
            {
                Console.WriteLine(MessageFormatter.Expected("="));
                return(null);
            }
            var expr = Expr.Parse(input);

            if (expr == null)
            {
                Console.WriteLine(MessageFormatter.Expected("expression"));
                return(null);
            }
            return(new Let(var, expr));
        }
예제 #2
0
        public static ExprListItem Parse(Input input)
        {
            var str = Str.Parse(input);

            if (str != null)
            {
                return(new ExprListItem(str));
            }

            var expr = Expr.Parse(input);

            return(expr != null ? new ExprListItem(expr) : null);
        }
예제 #3
0
파일: If.cs 프로젝트: KM198912/RetroBasic
        private static If NewMethod(Input input)
        {
            var cmd = input.Pop(new List <string> {
                KeywordIf
            });

            if (cmd == null)
            {
                return(null);
            }
            var lhExpr = Expr.Parse(input);

            if (lhExpr == null)
            {
                Console.WriteLine(MessageFormatter.Expected("expression"));
                return(null);
            }
            var relop = Relop.Parse(input);

            if (relop == null)
            {
                Console.WriteLine(string.Join("", MessageFormatter.Expected(Relop.Strings)));
                return(null);
            }
            var rhExpr = Expr.Parse(input);

            if (rhExpr == null)
            {
                Console.WriteLine(MessageFormatter.Expected("expression"));
                return(null);
            }
            var then = input.Pop(new List <string> {
                KeywordThen
            });

            if (then == null)
            {
                Console.WriteLine(MessageFormatter.Expected(KeywordThen));
                return(null);
            }
            var statement = Statement.Parse(input);

            if (statement == null)
            {
                Console.WriteLine(MessageFormatter.Expected("statement"));
                return(null);
            }
            return(new If(lhExpr, relop, rhExpr, statement));
        }
예제 #4
0
        private static Gosub NewMethod(Input input)
        {
            if (input.Pop(new List <string> {
                Keyword
            }) == null)
            {
                return(null);
            }
            var expr = Expr.Parse(input);

            if (expr == null)
            {
                Console.WriteLine(MessageFormatter.Expected("expression"));
                return(null);
            }
            return(new Gosub(expr));
        }
예제 #5
0
        public static Factor Parse(Input input)
        {
            if (Dejavu(input.Index))
            {
                return(null);
            }

            indexOnPreviousVisit = input.Index;

            var var = Var.Parse(input);

            if (var != null)
            {
                indexOnPreviousVisit = null;
                return(new Factor(var));
            }

            var number = Number.Parse(input);

            if (number != null)
            {
                indexOnPreviousVisit = null;
                return(new Factor(number));
            }

            var expr = Expr.Parse(input);

            if (expr != null)
            {
                indexOnPreviousVisit = null;
                return(new Factor(expr));
            }

            var rnd = Rnd.Parse(input);

            if (rnd != null)
            {
                indexOnPreviousVisit = null;
                return(new Factor(rnd));
            }

            return(null);
        }