Парсинг присваиваний значений переменным

This commit is contained in:
Victor 2015-04-15 23:34:58 +03:00
parent 7f9a2ae4e3
commit eeb798f76c

View File

@ -3,6 +3,7 @@ package com.annimon.everlastingsummer;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.annimon.everlastingsummer.ast.*;
import android.text.TextUtils;
/**
@ -46,6 +47,7 @@ public final class Parser {
labels = new HashMap<String, Integer>();
hasEndMenu = false;
preScan();
Variables.init();
}
public List<Token> getTokens() {
@ -191,6 +193,14 @@ public final class Parser {
private boolean command() {
final Token token = get(0);
if (match(token, TokenType.WORD)) {
if (match(TokenType.EQ)) {
// variable = expression
Variables.setVariable(token.getText(), expression().eval());
return false;
}
}
if (match(token, TokenType.RENPY_PAUSE)) {
consume(TokenType.LPAREN);
final double pause = consumeDouble();
@ -353,6 +363,18 @@ public final class Parser {
return false;
}
private Expression expression() {
return primary();
}
private Expression primary() {
final Token current = get(0);
if (match(current, TokenType.WORD)) {
return new VariableExpression(current.getText());
}
throw new RuntimeException();
}
private void preScan() {
// Сканируем все метки, для быстрого перехода командой jump.
// А также определяем параметры для оптимизации.