All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.moon.runner.core.ParseOpposite Maven / Gradle / Ivy

package com.moon.runner.core;

import com.moon.core.lang.ref.IntAccessor;
import com.moon.runner.RunnerSetting;

import static com.moon.core.lang.ThrowUtil.noInstanceError;
import static com.moon.runner.core.Constants.*;

/**
 * 负号解析:
 * 减法运算或负数都有可能
 *
 * @author moonsky
 */
final class ParseOpposite {
    private ParseOpposite() { noInstanceError(); }

    final static AsRunner parse(char[] chars, IntAccessor indexer, int len, RunnerSetting settings) {
        AsRunner handler, linked;
        int curr = ParseUtil.nextVal(chars, indexer, len);
        switch (curr) {
            case YUAN_L:
                handler = ParseGetter.parseYuan(chars, indexer, len, settings);
                break;
            case FANG_L:
                handler = ParseGetter.parseFang(chars, indexer, len, settings);
                break;
            case HUA_L:
                handler = ParseCurly.parse(chars, indexer, len, settings);
                break;
            case CALLER:
                handler = ParseCall.parse(chars, indexer, len, settings);
                break;
            default:
                if (ParseUtil.isNum(curr)) {
                    handler = ParseConst.parseNum(chars, indexer, len, curr);
                } else if (ParseUtil.isVar(curr)) {
                    handler = ParseGetter.parseVar(chars, indexer, len, curr);
                    ParseUtil.assertFalse(handler.isConst(), chars, indexer);
                } else {
                    handler = ParseUtil.throwErr(chars, indexer);
                }
                break;
        }
        ParseUtil.assertTrue(handler.isValuer(), chars, indexer);
        linked = ParseGetter.tryParseLinked(chars, indexer, len, settings, handler);
        return linked.isConst()
            ? DataConst.getOpposite((DataConst) linked)
            : new GetOpposite(linked);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy