Парсинг текста в одинарных кавычках
This commit is contained in:
parent
dc4d437021
commit
37d02f5ad9
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user