001    package org.maltparser.parser.algorithm.covington;
002    
003    import org.maltparser.core.exception.MaltChainedException;
004    import org.maltparser.core.feature.function.Function;
005    import org.maltparser.parser.AbstractParserFactory;
006    import org.maltparser.parser.Algorithm;
007    import org.maltparser.parser.DependencyParserConfig;
008    import org.maltparser.parser.ParserConfiguration;
009    /**
010     * @author Johan Hall
011     *
012     */
013    public abstract class CovingtonFactory implements AbstractParserFactory {
014            protected Algorithm algorithm;
015            protected DependencyParserConfig manager;
016            
017            public CovingtonFactory(Algorithm algorithm) {
018                    setAlgorithm(algorithm);
019                    setManager(algorithm.getManager());
020            }
021            
022            public ParserConfiguration makeParserConfiguration() throws MaltChainedException {
023                    boolean allowRoot = (Boolean)manager.getOptionValue("covington", "allow_root");
024                    boolean allowShift = (Boolean)manager.getOptionValue("covington", "allow_shift");
025                    if (manager.getConfigLogger().isInfoEnabled()) {
026                            manager.getConfigLogger().info("  Parser configuration : Covington with allow_root="+allowRoot+" and allow_shift="+allowShift+"\n");
027                    }
028                    CovingtonConfig config = new CovingtonConfig(manager.getSymbolTables(), allowRoot, allowShift);
029                    return config;
030            }
031            
032            public Function makeFunction(String subFunctionName) throws MaltChainedException {
033                    return new CovingtonAddressFunction(subFunctionName, algorithm);
034            }
035            
036            public Algorithm getAlgorithm() {
037                    return algorithm;
038            }
039    
040            public void setAlgorithm(Algorithm algorithm) {
041                    this.algorithm = algorithm;
042            }
043            
044            public DependencyParserConfig getManager() {
045                    return manager;
046            }
047    
048            public void setManager(DependencyParserConfig manager) {
049                    this.manager = manager;
050            }
051    }