package org.sugarj; import java.util.List; import org.spoofax.interpreter.terms.IStrategoTerm; import org.sugarj.common.path.Path; /** * @author seba */ public interface IBaseLanguage { public abstract AbstractBaseProcessor createNewProcessor(); public abstract String getVersion(); public abstract String getLanguageName(); /** * Examples: * Java -> "sugj" * Haskell -> "shs" * * @return extension of sugared source files. */ public abstract String getSugarFileExtension(); /** * Optional. The file extensions for binaries if the language is compiled; otherwise null. * * Examples: * Java -> "class" * Haskell -> "o" * * @return null or file extension of binary files. */ public abstract String getBinaryFileExtension(); /** * Used to provide extension for source files of original language. * This will be used to resolve imports if no sugared source file is available. * * Examples: * Java -> "java" * Haskell -> "hs" * * @return file extension of base non-sugared language. */ public abstract String getBaseFileExtension(); public abstract Path getInitGrammar(); public List<Path> getPackagedGrammars(); public abstract String getInitGrammarModuleName(); public abstract Path getInitTrans(); public abstract String getInitTransModuleName(); public abstract Path getInitEditor(); public abstract String getInitEditorModuleName(); public abstract boolean isExtensionDecl(IStrategoTerm decl); public abstract boolean isImportDecl(IStrategoTerm decl); public abstract boolean isBaseDecl(IStrategoTerm decl); public abstract boolean isPlainDecl(IStrategoTerm decl); }