From e672366a238ed8b27cafa04038b7ed9558aefcca Mon Sep 17 00:00:00 2001 From: Victor Date: Fri, 24 Apr 2015 16:59:48 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B0=D1=80=D1=81=D0=B8=D0=BD=D0=B3=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D1=81=20=D0=BA=D0=B0?= =?UTF-8?q?=D1=80=D1=82=D0=BE=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/annimon/everlastingsummer/Lexer.java | 4 +++ src/com/annimon/everlastingsummer/Parser.java | 29 +++++++++++++++++++ .../annimon/everlastingsummer/TokenType.java | 4 +++ 3 files changed, 37 insertions(+) diff --git a/src/com/annimon/everlastingsummer/Lexer.java b/src/com/annimon/everlastingsummer/Lexer.java index 1bdd83b..75201dc 100644 --- a/src/com/annimon/everlastingsummer/Lexer.java +++ b/src/com/annimon/everlastingsummer/Lexer.java @@ -70,6 +70,10 @@ public final class Lexer { KEYWORDS.put("make_names_unknown", TokenType.MAKE_NAMES_UNKNOWN); KEYWORDS.put("set_name", TokenType.SET_NAME); KEYWORDS.put("meet", TokenType.SET_NAME); + KEYWORDS.put("disable_all_zones", TokenType.DISABLE_ALL_ZONES); + KEYWORDS.put("disable_current_zone", TokenType.DISABLE_CURRENT_ZONE); + KEYWORDS.put("set_zone", TokenType.SET_ZONE); + KEYWORDS.put("show_map", TokenType.SHOW_MAP); } private final List tokens; diff --git a/src/com/annimon/everlastingsummer/Parser.java b/src/com/annimon/everlastingsummer/Parser.java index d10870d..6de864a 100644 --- a/src/com/annimon/everlastingsummer/Parser.java +++ b/src/com/annimon/everlastingsummer/Parser.java @@ -256,6 +256,35 @@ public final class Parser { return false; } + // Карта + if (match(token, TokenType.DISABLE_ALL_ZONES)) { + consume(TokenType.LPAREN); + consume(TokenType.RPAREN); + ViewActivity.getInstance().disableAllZones(); + return false; + } + if (match(token, TokenType.DISABLE_CURRENT_ZONE)) { + consume(TokenType.LPAREN); + consume(TokenType.RPAREN); + ViewActivity.getInstance().disableCurrentZone(); + return false; + } + if (match(token, TokenType.SET_ZONE)) { + consume(TokenType.LPAREN); + final String zone = consume(TokenType.TEXT).getText(); + // TODO: consume(TokenType.COMMA) + final String label = consume(TokenType.TEXT).getText(); + consume(TokenType.RPAREN); + ViewActivity.getInstance().setZone(zone, label); + return false; + } + if (match(token, TokenType.SHOW_MAP)) { + consume(TokenType.LPAREN); + consume(TokenType.RPAREN); + ViewActivity.getInstance().showMap(); + return true; + } + if (match(token, TokenType.WORD)) { if (match(TokenType.EQ)) { // variable = expression diff --git a/src/com/annimon/everlastingsummer/TokenType.java b/src/com/annimon/everlastingsummer/TokenType.java index 496f057..caff8d4 100644 --- a/src/com/annimon/everlastingsummer/TokenType.java +++ b/src/com/annimon/everlastingsummer/TokenType.java @@ -69,6 +69,10 @@ public enum TokenType { MAKE_NAMES_KNOWN, MAKE_NAMES_UNKNOWN, SET_NAME, + DISABLE_ALL_ZONES, + DISABLE_CURRENT_ZONE, + SET_ZONE, + SHOW_MAP, EOF }