/* zweic -- a compiler for Zwei
*
* Stephane Micheloud & LAMP
*
* $Id$
*/
package zweic;
/**
* This class implements the parser of the zwei compiler.
*/
class Parser(in: java.io.InputStream) extends Scanner(in) {
import Tokens._;
/**
* Reports an error that a specific token was expected but
* a different token found.
*/
private def error(expected: Token): Unit =
error("token of class " + expected);
/**
* Reports an error that a specific token was expected but
* a different token found.
*/
private def error(expected: String): Unit = {
val message = "syntax error\n" +
"expected: " + expected + "\n" +
"found : " + representation;
Report.fail(start, message);
}
/**
* If the current token corresponds to the token class 'expected'
* then skip it, otherwise signal an error.
*/
private def accept(expected: Token): Unit =
if (token == expected)
nextToken;
else
error(expected);
/**
* If the current token corresponds to the token class 'expected'
* then skip it and return success.
*/
private def check(expected: Token): Boolean =
if (token == expected) {
nextToken;
true
} else
false;
/**
* Parse the input and return an abstract syntax tree.
*/
def parse: Program = {
val result = program;
accept(EOF);
result
}
/**
* Program = { ClassDecl } Expression
*/
private def program: Program = {
// ... à compléter ...
}
// ... à compléter ...
}