Добавлены новые токены: MENU, ENDMENU, COLON

This commit is contained in:
Victor 2015-04-12 00:02:44 +03:00
parent 36f777aac4
commit 47f67833d6
2 changed files with 9 additions and 9 deletions

View File

@ -15,12 +15,12 @@ public final class Lexer {
private final List<Token> tokens; private final List<Token> tokens;
private final StringBuilder buffer; private final StringBuilder buffer;
private static final String OPERATOR_CHARS = "=+-()[]$"; private static final String OPERATOR_CHARS = "=+-()[]$:";
private static final TokenType[] OPERATOR_TYPES = new TokenType[] { private static final TokenType[] OPERATOR_TYPES = new TokenType[] {
TokenType.EQ, TokenType.EQ,
TokenType.PLUS, TokenType.MINUS, TokenType.PLUS, TokenType.MINUS,
TokenType.LPAREN, TokenType.RPAREN, TokenType.LBRACKET, TokenType.RBRACKET, TokenType.LPAREN, TokenType.RPAREN, TokenType.LBRACKET, TokenType.RBRACKET,
TokenType.COMMAND TokenType.COMMAND, TokenType.COLON,
}; };
private static final String[] KEYWORDS = { private static final String[] KEYWORDS = {
@ -32,7 +32,8 @@ public final class Lexer {
"at", "at",
"window", "hide", "show", "window", "hide", "show",
"with", "with",
"return",
"return", "menu", "endmenu",
"renpy.pause", "persistent.sprite_time", "renpy.pause", "persistent.sprite_time",
"prolog_time", "day_time", "sunset_time", "night_time" "prolog_time", "day_time", "sunset_time", "night_time"
@ -46,7 +47,8 @@ public final class Lexer {
TokenType.AT, TokenType.AT,
TokenType.WINDOW, TokenType.HIDE, TokenType.SHOW, TokenType.WINDOW, TokenType.HIDE, TokenType.SHOW,
TokenType.WITH, TokenType.WITH,
TokenType.RETURN,
TokenType.RETURN, TokenType.MENU, TokenType.ENDMENU,
TokenType.RENPY_PAUSE, TokenType.PERSISTENT_SPRITE_TIME, TokenType.RENPY_PAUSE, TokenType.PERSISTENT_SPRITE_TIME,
TokenType.PROLOG_TIME, TokenType.DAY_TIME, TokenType.SUNSET_TIME, TokenType.NIGHT_TIME TokenType.PROLOG_TIME, TokenType.DAY_TIME, TokenType.SUNSET_TIME, TokenType.NIGHT_TIME
@ -112,10 +114,6 @@ public final class Lexer {
} }
private void tokenizeWord(char ch) { private void tokenizeWord(char ch) {
if (ch == ':') {
addToken(TokenType.LABEL, false);
return;
}
if (Character.isLetterOrDigit(ch) || (ch == '_') || (ch == '.')) { if (Character.isLetterOrDigit(ch) || (ch == '_') || (ch == '.')) {
buffer.append(ch); buffer.append(ch);
} else { } else {

View File

@ -6,7 +6,6 @@ package com.annimon.everlastingsummer;
public enum TokenType { public enum TokenType {
COMMAND, // начинается с $ COMMAND, // начинается с $
LABEL, // заканчивается на :
WORD, WORD,
TEXT, TEXT,
NUMBER, NUMBER,
@ -19,6 +18,7 @@ public enum TokenType {
RPAREN, RPAREN,
LBRACKET, LBRACKET,
RBRACKET, RBRACKET,
COLON,
// ключевые слова // ключевые слова
PLAY, PLAY,
@ -42,6 +42,8 @@ public enum TokenType {
AT, AT,
WITH, WITH,
MENU,
ENDMENU,
RETURN, RETURN,
// команды // команды