Добавлены новые токены: MENU, ENDMENU, COLON
This commit is contained in:
parent
36f777aac4
commit
47f67833d6
@ -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 {
|
||||||
|
@ -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,
|
||||||
|
|
||||||
// команды
|
// команды
|
||||||
|
Loading…
Reference in New Issue
Block a user