Здраствуйте, пробую сделать анализ текста (для чего то похожего на свой ЯП но не совсем) и столкнулся с проблемой, программа должна осуществить проверку на то есть ли в этой позиции символ при помощи group, но по итогу я получаю ошибку.
java.lang.IllegalStateException: No match found
at java.util.regex.Matcher.group(Matcher.java:644) ~[?:?]
at quadroscript.quadroscript.langue.Lexer.nextToken(Lexer.java:41) ~[?:?]
at quadroscript.quadroscript.langue.Lexer.lexAnalisis(Lexer.java:19) ~[?:?]
at quadroscript.quadroscript.Quadroscript.onEnable(Quadroscript.java:31) ~[?:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:263) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:370) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:500) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugin(CraftServer.java:518) ~[patched_1.16.5.jar:git-Paper-794]
at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugins(CraftServer.java:432) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.loadWorld(MinecraftServer.java:599) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.DedicatedServer.init(DedicatedServer.java:298) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1074) ~[patched_1.16.5.jar:git-Paper-794]
at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:291) ~[patched_1.16.5.jar:git-Paper-794]
at java.lang.Thread.run(Thread.java:831) [?:?]
Lexer Class
package quadroscript.quadroscript.langue;
import java.lang.reflect.Array;
import java.util.Stack;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.HashMap;
public class Lexer {
String code;
Integer pos = 0;
public Stack<Token>tokenList = new Stack<Token>();
public Lexer(String code) {
this.code = code;
}
public Object[] lexAnalisis() {
while (this.nextToken()) {
System.out.println("TOKEN");
}
return this.tokenList.toArray();
}
private boolean nextToken() {
System.out.println(this.pos);
System.out.println(this.code);
System.out.println(this.code.length());
if (this.pos >= this.code.length()) {
return false;
}
HashMap<String, TokenType> tokenTypesValues = TokenTypesList.tokenTypesli;
for (HashMap.Entry<String, TokenType> entry : tokenTypesValues.entrySet()) {
String key = entry.getKey();
TokenType value = entry.getValue();
Pattern regex = Pattern.compile("^" + value.regex);
Matcher result = regex.matcher(this.code.substring(this.pos));
// Ошибка здесь ↓
if (result != null && result.group(1) != null) {
Token token = new Token(value, result.group(1), this.pos);
this.pos += result.group(1).length();
this.tokenList.push(token);
return true;
}
}
throw new Error("На позиции " + this.pos + " обнаружена ошибка!");
}
}