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

org.maltparserx.parser.algorithm.stack.StackAddressFunction Maven / Gradle / Ivy

package org.maltparserx.parser.algorithm.stack;

import org.maltparserx.core.exception.MaltChainedException;
import org.maltparserx.core.feature.function.AddressFunction;
import org.maltparserx.core.feature.value.AddressValue;
import org.maltparserx.parser.Algorithm;
import org.maltparserx.parser.ParsingException;
/**
 * @author Johan Hall
 *
 */
public class StackAddressFunction extends AddressFunction {
	public enum StackSubFunction {
		STACK, INPUT, LOOKAHEAD
	};
	private String subFunctionName;
	private StackSubFunction subFunction;
	private Algorithm parsingAlgorithm;
	private int index;
	
	public StackAddressFunction(String subFunctionName, Algorithm parsingAlgorithm) {
		super();
		setSubFunctionName(subFunctionName);
		setAlgorithm(parsingAlgorithm);
	}
	
	public void initialize(Object[] arguments) throws MaltChainedException {
		if (arguments.length != 1) {
			throw new ParsingException("Could not initialize "+this.getClass().getName()+": number of arguments are not correct. ");
		}
		if (!(arguments[0] instanceof Integer)) {
			throw new ParsingException("Could not initialize "+this.getClass().getName()+": the first argument is not an integer. ");
		}
		
		setIndex(((Integer)arguments[0]).intValue());
	}
	
	public Class[] getParameterTypes() {
		Class[] paramTypes = { java.lang.Integer.class };
		return paramTypes; 
	}
	
	public void update() throws MaltChainedException {
		update((StackConfig)parsingAlgorithm.getCurrentParserConfiguration());
	}
	
	public void update(Object[] arguments) throws MaltChainedException {
//		if (arguments.length != 1 || !(arguments[0] instanceof StackConfig)) {
//			throw new ParsingException("Arguments to the Stack address function is not correct. ");
//		}
//		update((StackConfig)arguments[0]);
		
		if (subFunction == StackSubFunction.STACK) {
			address.setAddress(((StackConfig)arguments[0]).getStackNode(index));
		} else if (subFunction == StackSubFunction.LOOKAHEAD) {
			address.setAddress(((StackConfig)arguments[0]).getLookaheadNode(index));
		} else if (subFunction == StackSubFunction.INPUT) {
			address.setAddress(((StackConfig)arguments[0]).getInputNode(index));
		} else {
			address.setAddress(null);
		}
	}
	
	private void update(StackConfig config) throws MaltChainedException {
		if (subFunction == StackSubFunction.STACK) {
			address.setAddress(config.getStackNode(index));
		} else if (subFunction == StackSubFunction.LOOKAHEAD) {
			address.setAddress(config.getLookaheadNode(index));
		} else if (subFunction == StackSubFunction.INPUT) {
			address.setAddress(config.getInputNode(index));
		} else {
			address.setAddress(null);
		}
	}
	
	public String getSubFunctionName() {
		return subFunctionName;
	}

	public void setSubFunctionName(String subFunctionName) {
		this.subFunctionName = subFunctionName;
		subFunction = StackSubFunction.valueOf(subFunctionName.toUpperCase());
	}
	
	public StackSubFunction getSubFunction() {
		return subFunction;
	}
	
	public AddressValue getAddressValue() {
		return address;
	}
	
	public Algorithm getParsingAlgorithm() {
		return parsingAlgorithm;
	}

	public void setAlgorithm(Algorithm parsingAlgorithm) {
		this.parsingAlgorithm = parsingAlgorithm;
	}

	public int getIndex() {
		return index;
	}

	public void setIndex(int index) {
		this.index = index;
	}
	
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		
		StackAddressFunction other = (StackAddressFunction) obj;
		if (index != other.index)
			return false;
		if (parsingAlgorithm == null) {
			if (other.parsingAlgorithm != null)
				return false;
		} else if (!parsingAlgorithm.equals(other.parsingAlgorithm))
			return false;
		if (subFunction == null) {
			if (other.subFunction != null)
				return false;
		} else if (!subFunction.equals(other.subFunction))
			return false;
		return true;
	}
	
	public String toString() {
		final StringBuilder sb = new StringBuilder();
		sb.append(subFunctionName);
		sb.append('[');
		sb.append(index);
		sb.append(']');
		return sb.toString();
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy