Возможность вывода простых значений без оператора print

This commit is contained in:
Victor 2018-03-09 15:38:36 +02:00
parent a89b02ee8d
commit d58bf6f271

View File

@ -10,6 +10,7 @@ import com.annimon.ownlang.lib.Variables;
import com.annimon.ownlang.parser.Lexer; import com.annimon.ownlang.parser.Lexer;
import com.annimon.ownlang.parser.Parser; import com.annimon.ownlang.parser.Parser;
import com.annimon.ownlang.parser.Token; import com.annimon.ownlang.parser.Token;
import com.annimon.ownlang.parser.TokenType;
import com.annimon.ownlang.parser.ast.BlockStatement; import com.annimon.ownlang.parser.ast.BlockStatement;
import com.annimon.ownlang.parser.ast.Statement; import com.annimon.ownlang.parser.ast.Statement;
import com.annimon.ownlang.parser.visitors.PrintVisitor; import com.annimon.ownlang.parser.visitors.PrintVisitor;
@ -35,6 +36,8 @@ public final class Repl {
RESET = ":reset", RESET = ":reset",
EXIT = ":exit"; EXIT = ":exit";
private static final Token PRINTLN_TOKEN = new Token(TokenType.PRINTLN, "", 0, 0);
public static void main(String[] args) { public static void main(String[] args) {
System.out.println("Welcome to OwnLang " + Main.VERSION + " REPL"); System.out.println("Welcome to OwnLang " + Main.VERSION + " REPL");
printHelp(false); printHelp(false);
@ -73,8 +76,16 @@ public final class Repl {
final Parser parser = new Parser(tokens); final Parser parser = new Parser(tokens);
program = parser.parse(); program = parser.parse();
if (parser.getParseErrors().hasErrors()) { if (parser.getParseErrors().hasErrors()) {
// Try to print value
List<Token> tokens2 = new ArrayList<>();
tokens2.add(PRINTLN_TOKEN);
tokens2.addAll(tokens);
Parser parser2 = new Parser(tokens2);
program = parser2.parse();
if (parser2.getParseErrors().hasErrors()) {
continue; continue;
} }
}
program.execute(); program.execute();
} catch (LexerException lex) { } catch (LexerException lex) {
continue; continue;