Exemple #1
0
        public static List <IAst> Astyfie(Token c)
        {
            var re = new List <IAst>();
            var x  = IAst.ParseToken(c);

            if (x != null)
            {
                re.AddRange(x);
            }
            return(re);
        }
Exemple #2
0
        public override IAst Parse(Token raw)
        {
            var re = new LoopStmt();

            if (raw.RawHeader.Split(' ').Length == 2)//counted
            {
                if (char.IsDigit(raw.RawHeader.Split(' ').Last()[0]))
                {
                    re.LoopType    = LoopType.CountedLoop;
                    re.CountedLoop = IAst.ParseToken(raw.RawHeader.Split(' ').Last())[0];
                }
            }
            else
            {
                if (raw.RawHeader.Trim() == "loop")//infinitloop
                {
                    re.LoopType = LoopType.InfinitLoop;
                }
                else
                {
                    if (raw.RawHeader.Trim().Split(' ')[2] == "to")//ForLoop
                    {
                        re.LoopType = LoopType.ForLoop;
                        var parts = raw.RawHeader.Trim().Split(' ');
                        re.VarName     = parts[1];
                        re.CountedLoop = IAst.ParseToken(parts[3])[0];
                        //todo: step
                    }
                    else
                    {
                        if (raw.RawHeader.Trim().Split(' ')[2] == "in")//ForLoop
                        {
                            re.LoopType = LoopType.Foreachloop;
                            var parts = raw.RawHeader.Trim().Split(' ');
                            re.VarName        = parts[1];
                            re.CollectionName = IAst.ParseToken(parts[3])[0];
                        }
                    }
                }
            }



            foreach (var i in raw.Body)
            {
                re.Body.AddRange(IAst.ParseToken(i));
            }

            return(re);
        }
Exemple #3
0
        public override IAst Parse(Token raw)
        {
            var re = new ExpressionStmt();

            if (raw.Raw.Contains("=="))
            {
                var x = Regex.Split(raw.Raw, "==");
                re.Left     = IAst.ParseToken(x[0].Trim())[0];
                re.Right    = IAst.ParseToken(x[1].Trim())[0];
                re.Operator = "beq";
            }
            else if (raw.Raw.Contains("!="))
            {
                var x = Regex.Split(raw.Raw, "!=");
                re.Left     = IAst.ParseToken(x[0].Trim())[0];
                re.Right    = IAst.ParseToken(x[1].Trim())[0];
                re.Operator = "Bne";
            }
            else if (raw.Raw.Contains("<="))
            {
                var x = Regex.Split(raw.Raw, "<=");
                re.Left     = IAst.ParseToken(x[0].Trim())[0];
                re.Right    = IAst.ParseToken(x[1].Trim())[0];
                re.Operator = "Ble";
            }
            else if (raw.Raw.Contains(">="))
            {
                var x = Regex.Split(raw.Raw, ">=");
                re.Left     = IAst.ParseToken(x[0].Trim())[0];
                re.Right    = IAst.ParseToken(x[1].Trim())[0];
                re.Operator = "Bge";
            }
            else if (raw.Raw.Contains(">"))
            {
                var x = Regex.Split(raw.Raw, ">");
                re.Left     = IAst.ParseToken(x[0].Trim())[0];
                re.Right    = IAst.ParseToken(x[1].Trim())[0];
                re.Operator = "Bgt";
            }
            else if (raw.Raw.Contains("<"))
            {
                var x = Regex.Split(raw.Raw, "<");
                re.Left     = IAst.ParseToken(x[0].Trim())[0];
                re.Right    = IAst.ParseToken(x[1].Trim())[0];
                re.Operator = "Blt";
            }

            return(re);
        }
Exemple #4
0
        public override IAst Parse(Token raw)
        {
            var re = new RetStmt();
            var x  = IAst.ParseToken(new Token()
            {
                Raw = raw.Raw?.Trim().Split(' ')[1]
            });

            if (x != null)
            {
                re.RetValue = x[0];
            }

            return(re);
        }
Exemple #5
0
        public override IAst Parse(Token raw)
        {
            var atr = raw.Raw.Split(new char[] { '@' }, StringSplitOptions.RemoveEmptyEntries);

            for (int i = 1; i < atr.Length; i++)
            {
                var att = atr[i];
                IAst.Buffer.AddRange(IAst.ParseToken(new Token {
                    Raw = "@" + att.Trim()
                }));
            }

            return(new AttributeStmt()
            {
                Atrribute = atr[0].Trim()
            });
        }
Exemple #6
0
        public override IAst Parse(Token raw)
        {
            var re = new TypeStmt();

            re.Name = raw.RawHeader.Trim().Split(' ')[1];

            foreach (var i in raw.Body)
            {
                re.Body.AddRange(IAst.ParseToken(i));
            }

            if (raw.RawHeader.Split(')').Last().Contains(":"))
            {
                re.BaseType = raw.RawHeader.Split(':').Last().Trim();
            }

            return(re);
        }
Exemple #7
0
        public override IAst Parse(Token raw)
        {
            var re = new DecStmt();

            //dec txt : str = "Hello world"
            re.Name = raw.Raw.Split(' ')[1];

            if (raw.Raw.Split('=')[0].Contains(':'))
            {
                re.Type = raw.Raw.Split('=')[0].Split(':').Last().Trim();
            }

            if (raw.Raw.Contains('='))
            {
                re.Value = IAst.ParseToken(raw.Raw.Split('=').Last().Trim())[0];
            }

            return(re);
        }
Exemple #8
0
        public override IAst Parse(Token raw)
        {
            var re = new InvokeStmt();

            re.Path = raw.Raw.Trim().Split('(')[0];
            foreach (var i in raw.Raw.Trim().Remove(raw.Raw.Trim().Length - 1, 1).Replace(re.Path, "").Remove(0, 1).Split(','))
            {
                var x = IAst.ParseToken(new Token()
                {
                    Raw = i.Trim()
                });
                if (x != null)
                {
                    re.Perams.AddRange(x);
                }
            }

            return(re);
        }
Exemple #9
0
        public override IAst Parse(Token raw)
        {
            var re = new FnStmt();

            re.Name = raw.RawHeader.Trim().Split(' ')[1].Split('(')[0];

            if (raw.RawHeader.Split(')').Last().Contains(":"))
            {
                re.ReturnType = raw.RawHeader.Split(':').Last().Trim();
            }


            var s1 = Regex.Split(raw.RawHeader.Replace(" ", ""), re.Name + "\\(")[1];
            var s2 = "";

            if (!string.IsNullOrEmpty(re.ReturnType))
            {
                s2 = s1.Replace(":" + re.ReturnType, "").Trim().TrimEnd(')');
            }
            else
            {
                s2 = s1.Trim().TrimEnd(')');
            }

            if (s2 != "")
            {
                var prm = s2.Split(',');
                foreach (var i in prm)
                {
                    re.Parameters.Add(i.Split(':')[0], i.Split(':')[1]);
                }
            }



            foreach (var i in raw.Body)
            {
                re.Body.AddRange(IAst.ParseToken(i));
            }

            return(re);
        }
Exemple #10
0
        public override IAst Parse(Token raw)
        {
            var re = new WhenStmt();

            var exspretion = raw.RawHeader.Replace("when", "" /* Replace is fine becuse only one when is vaild in statment */).Trim().Remove(0, 1);

            exspretion = exspretion.Remove(exspretion.Length - 1, 1);

            re.Expression = Parser.ParseExpression(new Token()
            {
                Raw = exspretion, Position = raw.Position - "when".Length
            });

            foreach (var i in raw.Body)
            {
                re.Body.AddRange(IAst.ParseToken(i));
            }

            return(re);
        }