Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.InputStreamReader;
- import java.io.Reader;
- import symbols.*;
- /**
- * Parse simple binary expressions with parantheses
- *
- * @author NN
- * @version 2008-xx-yy
- */
- public class Parser {
- private SymbolReader symbolReader;
- public Parser( Reader inStream ) {
- symbolReader = new SymbolReader(inStream);
- }
- public Expression parse() throws SyntaxError {
- return parseExpression(symbolReader.readNextSymbol());
- }
- private Expression parseExpression(Symbol s) throws SyntaxError{
- // if (s.getType()==SymbolTypes.EOL)
- // System.out.println("EOL");
- if(s.getType()==SymbolTypes.VALUE){
- System.out.println("if");
- return new ConstantExpression(s.getValue());
- }
- else if(s.getType()==SymbolTypes.LPAREN){
- Expression e =parseExpression(symbolReader.readNextSymbol());
- Symbol x = symbolReader.readNextSymbol();
- if(x.getType()==SymbolTypes.RPAREN){
- return e;
- }
- else{
- e=parseBinary(e,x);
- //if(symbolReader.readNextSymbol().getType()==SymbolTypes.RPAREN)
- return e;
- // else
- // return null;
- }
- }
- else {//if (s.getType()==SymbolTypes.RPAREN)
- System.out.println("else");
- return parseExpression(s);
- }
- //return new ConstantExpression( 0);
- }
- private Expression parseBinary(Expression s, Symbol t) throws SyntaxError{
- System.out.println("Binary");
- return new BinaryExpression(s,t.getType(),parseExpression(symbolReader.readNextSymbol()));
- }
- // private Expression parseBinary(Symbol s,Symbol t) throws SyntaxError{
- // return new BinaryExpression(parseExpression(s),t.getType(),parseExpression(symbolReader.readNextSymbol()));
- // }
- public static void main(String[]arg){
- Parser p = new Parser(new InputStreamReader(System.in));
- try {
- Expression e = p.parse();
- //e.prettyInfix();
- System.out.println(e.getValue());
- } catch (SyntaxError e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement