Парсинг присваиваний значений переменным
This commit is contained in:
parent
7f9a2ae4e3
commit
eeb798f76c
@ -3,6 +3,7 @@ package com.annimon.everlastingsummer;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import com.annimon.everlastingsummer.ast.*;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -46,6 +47,7 @@ public final class Parser {
|
|||||||
labels = new HashMap<String, Integer>();
|
labels = new HashMap<String, Integer>();
|
||||||
hasEndMenu = false;
|
hasEndMenu = false;
|
||||||
preScan();
|
preScan();
|
||||||
|
Variables.init();
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Token> getTokens() {
|
public List<Token> getTokens() {
|
||||||
@ -191,6 +193,14 @@ public final class Parser {
|
|||||||
private boolean command() {
|
private boolean command() {
|
||||||
final Token token = get(0);
|
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)) {
|
if (match(token, TokenType.RENPY_PAUSE)) {
|
||||||
consume(TokenType.LPAREN);
|
consume(TokenType.LPAREN);
|
||||||
final double pause = consumeDouble();
|
final double pause = consumeDouble();
|
||||||
@ -353,6 +363,18 @@ public final class Parser {
|
|||||||
return false;
|
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() {
|
private void preScan() {
|
||||||
// Сканируем все метки, для быстрого перехода командой jump.
|
// Сканируем все метки, для быстрого перехода командой jump.
|
||||||
// А также определяем параметры для оптимизации.
|
// А также определяем параметры для оптимизации.
|
||||||
|
Loading…
Reference in New Issue
Block a user