Задать вопрос
@zaralX
Я человек, я упал с луны.

Как исправить ошибку при использовании matcher.group(1)?

Здраствуйте, пробую сделать анализ текста (для чего то похожего на свой ЯП но не совсем) и столкнулся с проблемой, программа должна осуществить проверку на то есть ли в этой позиции символ при помощи 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 + " обнаружена ошибка!");
    }
}
  • Вопрос задан
  • 168 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019 Куратор тега Java
Bigdata Engineer
Вот так надо

Pattern regex = Pattern.compile("^" + value.regex);
Matcher result = regex.matcher(this.code.substring(this.pos));
if (result.matches()) {
 .......
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы