Парсинг присваиваний значений переменным
This commit is contained in:
parent
7f9a2ae4e3
commit
eeb798f76c
@ -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.
|
||||
// А также определяем параметры для оптимизации.
|
||||
|
Loading…
Reference in New Issue
Block a user