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); }
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); }
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); }
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); }
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() }); }
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); }
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); }
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); }
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); }
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); }