public object VisitPrintStmt(Stmt.Print stmt) { object value = Evaluate(stmt.Expr); Ture.Print(value.ToString()); return(null); }
public string Interpret(ICollection <Stmt> statements) { try { foreach (var statement in statements) { Execute(statement); } } catch (RuntimeError error) { Ture.RuntimeError(error); } return(null); }
private void ScanToken() { char c = Advance(); switch (c) { case '(': AddToken(LEFT_PAREN); break; case ')': AddToken(RIGHT_PAREN); break; case '{': AddToken(LEFT_BRACE); break; case '}': AddToken(RIGHT_BRACE); break; case ',': AddToken(COMMA); break; case '.': AddToken(DOT); break; case '-': AddToken(MINUS); break; case '+': AddToken(PLUS); break; case ';': AddToken(SEMICOLON); break; case '*': AddToken(STAR); break; case '!': AddToken(Match('=') ? EXCLAMATION_EQUAL : EXCLAMATION); break; case '=': AddToken(Match('=') ? EQUAL_EQUAL : EQUAL); break; case '<': AddToken(Match('=') ? LESS_EQUAL : LESS); break; case '>': AddToken(Match('=') ? GREATER_EQUAL : GREATER); break; case '&': if (Match('&')) { AddToken(AND); } else { Ture.Report(line, null, "Unexpected character."); } break; case '|': if (Match('|')) { AddToken(OR); } else { Ture.Report(line, null, "Unexpected character."); } break; case '/': if (Match('/')) { while (Peek() != '\n' && !IsAtEnd()) { Advance(); } } else { AddToken(SLASH); }; break; case ' ': case '\r': case '\t': break; case '\n': line++; break; case '"': String(); break; default: if (IsDigit(c)) { Number(); } else if (IsAlpha(c)) { Identifier(); } else { Ture.Report(line, null, "Unexpected character."); } break; } }
private ParseError Error(Token token, string message) { Ture.Error(token, message); return(new ParseError()); }