bool ParseElement(string elem, out Expression result) { result = null; elem = elem.Trim(); if (elem.Length == 0) { return false; } if (elem[0] == '(') { elem = elem.Substring(1, elem.Length-2).Trim(); } int val; if (int.TryParse(elem, out val)) { result = new LiteralExpression(val); } else { // verify variable name for(int i=0; i<elem.Length; ++i) { if (!char.IsUpper(elem[i]) || elem[i] == '_' || char.IsNumber(elem[i])) { return false; } } result = new VariableExpression(elem); } return true; }
State SawTurn(Token t) { Expression exp = null; if (t.type == TokenType.Expression) { exp = mExpParser.Parse(t.data); } else { switch(t.data) { case "left": exp = new LiteralExpression(90); break; case "right": exp = new LiteralExpression(-90); break; } } if (exp != null) { mScratchpad.Add(new ActionInstruction(turnAction, exp)); return Idle; } return null; }