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