Skip to content

Commit

Permalink
refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
fglock committed Oct 21, 2024
1 parent 1152ad6 commit 4f208f6
Showing 1 changed file with 19 additions and 28 deletions.
47 changes: 19 additions & 28 deletions src/main/java/org/perlonjava/parser/StringParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ public static ParsedString parseRawStringWithDelimiter(EmitterContext ctx, List<
if (parenLevel == 0) {
if (redo && !isPair) {
redo = false;
state = STRING; // Restart FSM for another string
// Restart FSM for another string
buffers.add(buffer.toString());
buffer = new StringBuilder();
break; // Exit the loop to restart FSM
Expand Down Expand Up @@ -107,7 +107,7 @@ public static ParsedString parseRawStringWithDelimiter(EmitterContext ctx, List<
tokPos++; // Move to the next token
}
buffers.add(buffer.toString());
if (remain.length() > 0) {
if (!remain.isEmpty()) {
tokPos--;
tokens.get(tokPos).text = remain.toString(); // Put the remaining string back in the tokens list
}
Expand All @@ -128,7 +128,7 @@ public static ParsedString parseRawStrings(EmitterContext ctx, List<LexerToken>
if (QUOTE_PAIR.containsKey(delim)) {
pos = Whitespace.skipWhitespace(pos, tokens);
ParsedString ast2 = parseRawStringWithDelimiter(ctx, tokens, pos, false);
ast.buffers.add(ast2.buffers.get(0));
ast.buffers.add(ast2.buffers.getFirst());
ast.next = ast2.next;
pos = ast.next;
}
Expand All @@ -153,7 +153,7 @@ static Node parseRegexString(EmitterContext ctx, ParsedString rawStr) {
Node parsed;
if (rawStr.startDelim == '\'') {
// single quote delimiter, use the string as-is
parsed = new StringNode(rawStr.buffers.get(0), rawStr.index);
parsed = new StringNode(rawStr.buffers.getFirst(), rawStr.index);
} else {
// interpolate variables, but ignore the escapes
parsed = parseDoubleQuotedString(ctx, rawStr, false);
Expand All @@ -162,7 +162,7 @@ static Node parseRegexString(EmitterContext ctx, ParsedString rawStr) {
}

static Node parseDoubleQuotedString(EmitterContext ctx, ParsedString rawStr, boolean parseEscapes) {
String input = rawStr.buffers.get(0);
String input = rawStr.buffers.getFirst();
int tokenIndex = rawStr.next;

StringBuilder str = new StringBuilder(); // Buffer to hold the parsed string
Expand Down Expand Up @@ -203,7 +203,7 @@ static Node parseDoubleQuotedString(EmitterContext ctx, ParsedString rawStr, boo
str.append(text);
break;
}
if (str.length() > 0) {
if (!str.isEmpty()) {
parts.add(new StringNode(str.toString(), tokenIndex)); // Add the string so far to parts
str = new StringBuilder(); // Reset the buffer
}
Expand All @@ -215,7 +215,7 @@ static Node parseDoubleQuotedString(EmitterContext ctx, ParsedString rawStr, boo
// block-like
// extract the string between brackets
StringParser.ParsedString rawStr2 = StringParser.parseRawStrings(ctx, parser.tokens, parser.tokenIndex, 1);
String blockStr = rawStr2.buffers.get(0);
String blockStr = rawStr2.buffers.getFirst();
ctx.logDebug("str block-like: " + blockStr);
blockStr = sigil + "{" + blockStr + "}";
Parser blockParser = new Parser(ctx, new Lexer(blockStr).tokenize());
Expand Down Expand Up @@ -288,17 +288,17 @@ static Node parseDoubleQuotedString(EmitterContext ctx, ParsedString rawStr, boo
}
}

if (str.length() > 0) {
if (!str.isEmpty()) {
parts.add(new StringNode(str.toString(), tokenIndex)); // Add the remaining string to parts
}

// Join the parts
if (parts.isEmpty()) {
return new StringNode("", tokenIndex);
} else if (parts.size() == 1) {
Node result = parts.get(0);
Node result = parts.getFirst();
if (result instanceof StringNode) {
return parts.get(0);
return parts.getFirst();
}
}
return new BinaryOperatorNode("join",
Expand Down Expand Up @@ -425,7 +425,7 @@ private static void parseDoubleQuotedEscapes(EmitterContext ctx, List<LexerToken
}

static Node parseSingleQuotedString(StringParser.ParsedString rawStr) {
String input = rawStr.buffers.get(0);
String input = rawStr.buffers.getFirst();
char startDelim = rawStr.startDelim;
char endDelim = rawStr.endDelim;
int tokenIndex = rawStr.index;
Expand Down Expand Up @@ -461,7 +461,7 @@ static Node parseSingleQuotedString(StringParser.ParsedString rawStr) {
public static ListNode parseWordsString(ParsedString rawStr) {
// Use a regular expression to split the string.
// " +" matches one or more ASCII space characters
String[] words = rawStr.buffers.get(0).trim().split("[ \t\n]+");
String[] words = rawStr.buffers.getFirst().trim().split("[ \t\n]+");
ListNode list = new ListNode(rawStr.index);
for (String word : words) {
list.elements.add(new StringNode(word, rawStr.index));
Expand All @@ -483,7 +483,7 @@ public static OperatorNode parseRegexReplace(EmitterContext ctx, ParsedString ra
replace = blockParser.parseBlock();
} else {
// handle string interpolaton
rawStr.buffers.remove(0); // shift replace to first position
rawStr.buffers.removeFirst(); // shift replace to first position
replace = parseDoubleQuotedString(ctx, rawStr, false);
}

Expand Down Expand Up @@ -526,7 +526,7 @@ public static OperatorNode parseRegexMatch(EmitterContext ctx, String operator,
public static OperatorNode parseSystemCommand(EmitterContext ctx, String operator, ParsedString rawStr) {
operator = "qx";
// TODO when to interpolate variables?
Node parsed = new StringNode(rawStr.buffers.get(0), rawStr.index);
Node parsed = new StringNode(rawStr.buffers.getFirst(), rawStr.index);
List<Node> elements = new ArrayList<>();
elements.add(parsed);
ListNode list = new ListNode(elements, rawStr.index);
Expand All @@ -543,20 +543,11 @@ public static Node parseRawString(Parser parser, String operator) {
}
}
ParsedString rawStr;
int stringParts = 1;
switch (operator) {
case "s":
case "tr":
case "y":
stringParts = 3; // s{str}{str}modifier
break;
case "m":
case "qr":
case "/":
case "//":
stringParts = 2; // m{str}modifier
break;
}
int stringParts = switch (operator) {
case "s", "tr", "y" -> 3; // s{str}{str}modifier
case "m", "qr", "/", "//" -> 2;
default -> 1; // m{str}modifier
};
rawStr = parseRawStrings(parser.ctx, parser.tokens, parser.tokenIndex, stringParts);
parser.tokenIndex = rawStr.next;

Expand Down

0 comments on commit 4f208f6

Please sign in to comment.