Парсинг текста в одинарных кавычках

This commit is contained in:
Victor 2015-04-18 16:41:41 +03:00
parent dc4d437021
commit 37d02f5ad9

View File

@ -73,6 +73,7 @@ public final class Lexer {
private TokenizeState state; private TokenizeState state;
private int pos; private int pos;
private char textStartChar;
private enum TokenizeState { private enum TokenizeState {
DEFAULT, NUMBER, OPERATOR, WORD, TEXT, COMMENT DEFAULT, NUMBER, OPERATOR, WORD, TEXT, COMMENT
@ -119,8 +120,9 @@ public final class Lexer {
// Число // Число
buffer.append(ch); buffer.append(ch);
state = TokenizeState.NUMBER; state = TokenizeState.NUMBER;
} else if (ch == '"') { } else if (ch == '"' || ch == '\'') {
// Текст в "кавычках" // Текст в "кавычках" или 'одинарных'
textStartChar = ch;
state = TokenizeState.TEXT; state = TokenizeState.TEXT;
} else if (ch == '#') { } else if (ch == '#') {
clearBuffer(); clearBuffer();
@ -160,7 +162,7 @@ public final class Lexer {
} }
private void tokenizeText(char ch) { private void tokenizeText(char ch) {
if (ch == '"') { if (ch == textStartChar) {
final int len = buffer.length(); final int len = buffer.length();
// Добавляем токен, если не было экранирования символа кавычки. // Добавляем токен, если не было экранирования символа кавычки.
if (len == 0 || if (len == 0 ||
@ -170,7 +172,7 @@ public final class Lexer {
} }
// Экранируем символ кавычки. // Экранируем символ кавычки.
if (len > 0) { if (len > 0) {
buffer.setCharAt(len - 1, '\"'); buffer.setCharAt(len - 1, textStartChar);
return; return;
} }
} }