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

xyz.cofe.cxel.ast.BooleanAST Maven / Gradle / Ivy

package xyz.cofe.cxel.ast;

import xyz.cofe.cxel.EvalError;
import xyz.cofe.cxel.tok.KeywordTok;
import xyz.cofe.text.tparse.TPointer;

/**
 * Литерал - булево
 */
public class BooleanAST extends ASTBase implements LiteralAST {
    /**
     * Конструктор копирования
     * @param sample образец для копирования
     */
    protected BooleanAST( BooleanAST sample ) {
        super(sample);
        if( sample!=null ){
            this.keywordTok = sample.keywordTok;
        }
    }

    /**
     * Конструктор
     * @param begin указатель на расположение
     * @param tok токен
     */
    public BooleanAST( TPointer begin, KeywordTok tok) {
        if(begin==null)throw new IllegalArgumentException("begin==null");
        if( tok==null )throw new IllegalArgumentException("tok==null");
        this.begin = begin;
        this.end = begin.move(1);
        this.keywordTok = tok;
    }

    /**
     * Клонирование
     * @return клон
     */
    public BooleanAST clone(){ return new BooleanAST(this); }

    /**
     * токен соответствующий числу
     */
    protected KeywordTok keywordTok;

    /**
     * Возвращает токен соответствующий числу
     * @return токен
     */
    public KeywordTok keywordTok(){ return keywordTok; }

    /**
     * Указывает токен соответствующий числу
     * @param t токен
     * @return клон с новым токеном
     */
    public BooleanAST keywordTok( KeywordTok t ){
        if( t==null )throw new IllegalArgumentException("t==null");
        BooleanAST c = clone();
        c.keywordTok = t;
        return c;
    }

    /**
     * Возвращает булево
     * @return булево
     */
    public Boolean value(){
        KeywordTok tok = keywordTok;
        if( tok!=null && tok.keyword()!=null ){
            switch( tok.keyword() ){
                case True: return true;
                case False: return false;
                default:
                    throw new EvalError("can't eval token "+tok.keyword()+" as boolean");
            }
        }
        throw new EvalError("can't eval token");
    }

    @Override
    public String toString() {
        return BooleanAST.class.getSimpleName()+" "+(keywordTok.text());
    }

    @Override
    public AST[] children(){ return emptyChildren(); }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy