Advertisement
Guest User

Untitled

a guest
May 26th, 2015
243
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.96 KB | None | 0 0
  1. import java.io.InputStreamReader;
  2. import java.io.Reader;
  3.  
  4. import symbols.*;
  5.  
  6. /**
  7. * Parse simple binary expressions with parantheses
  8. *
  9. * @author NN
  10. * @version 2008-xx-yy
  11. */
  12. public class Parser {
  13. private SymbolReader symbolReader;
  14.  
  15. public Parser( Reader inStream ) {
  16. symbolReader = new SymbolReader(inStream);
  17. }
  18.  
  19. public Expression parse() throws SyntaxError {
  20. return parseExpression(symbolReader.readNextSymbol());
  21. }
  22. private Expression parseExpression(Symbol s) throws SyntaxError{
  23.  
  24. // if (s.getType()==SymbolTypes.EOL)
  25. // System.out.println("EOL");
  26. if(s.getType()==SymbolTypes.VALUE){
  27. System.out.println("if");
  28. return new ConstantExpression(s.getValue());
  29.  
  30. }
  31.  
  32.  
  33. else if(s.getType()==SymbolTypes.LPAREN){
  34. Expression e =parseExpression(symbolReader.readNextSymbol());
  35. Symbol x = symbolReader.readNextSymbol();
  36. if(x.getType()==SymbolTypes.RPAREN){
  37. return e;
  38. }
  39. else{
  40.  
  41. e=parseBinary(e,x);
  42. //if(symbolReader.readNextSymbol().getType()==SymbolTypes.RPAREN)
  43. return e;
  44. // else
  45. // return null;
  46. }
  47.  
  48. }
  49. else {//if (s.getType()==SymbolTypes.RPAREN)
  50.  
  51. System.out.println("else");
  52. return parseExpression(s);
  53. }
  54.  
  55.  
  56.  
  57. //return new ConstantExpression( 0);
  58. }
  59. private Expression parseBinary(Expression s, Symbol t) throws SyntaxError{
  60. System.out.println("Binary");
  61. return new BinaryExpression(s,t.getType(),parseExpression(symbolReader.readNextSymbol()));
  62. }
  63. // private Expression parseBinary(Symbol s,Symbol t) throws SyntaxError{
  64. // return new BinaryExpression(parseExpression(s),t.getType(),parseExpression(symbolReader.readNextSymbol()));
  65. // }
  66.  
  67. public static void main(String[]arg){
  68. Parser p = new Parser(new InputStreamReader(System.in));
  69. try {
  70. Expression e = p.parse();
  71.  
  72. //e.prettyInfix();
  73. System.out.println(e.getValue());
  74. } catch (SyntaxError e) {
  75. // TODO Auto-generated catch block
  76. e.printStackTrace();
  77. }
  78. }
  79.  
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement