package languages;
import java.io.Reader;
/**
* Base interface for all languages, which is used to
* create scanners and parsers for a specific language.
*
* @author Benedikt Meurer
* @version $Id$
*/
public interface Language {
/**
* Allocates a new {@link LanguageParser} for this language,
* using the specified <code>scanner</code> as token source
* for the newly allocated parser.
*
* @param scanner the {@link LanguageScanner} to use as token
* source for the newly allocated parser.
*
* @return the newly allocated parser for this language.
*
* @throws NullPointerException if <code>scanner</code>
* is <code>null</code>.
*/
public LanguageParser newParser(LanguageScanner scanner);
/**
* Convenience wrapper method for the {@link #newParser(LanguageScanner)}
* method, which automatically allocates a scanner for the specified
* <code>reader</code> using the {@link #newScanner(Reader)} method.
*
* @param reader the {@link Reader} for the source input stream.
*
* @return the newly allocated parser for this language.
*
* @throws NullPointerException if <code>reader</code> is <code>null</code>.
*/
public LanguageParser newParser(Reader reader);
/**
* Allocates a new {@link LanguageScanner}, a lexer, for this
* language, which parses tokens from the specified <code>reader</code>.
*
* @param reader the {@link Reader} for the source input stream.
*
* @return a newly allocated scanner for this language.
*
* @throws NullPointerException if <code>reader</code>
* is <code>null</code>.
*/
public LanguageScanner newScanner(Reader reader);
}