/**
   * Process an input string through the tokenizer and then parser.
   *
   * <p>A sequence of <code>$x=(3+5)/2;</code> will return an IExpressionNode with a value of <code>
   * 4.0</code>.
   *
   * @param sequence input to parse
   * @return IExpressionNode result
   * @throws ParserException
   */
  public List<IExpressionNode> parse(String sequence) throws ParserException {
    if (tokenizer == null) {
      tokenizer = new Tokenizer();
      initialiseTokenizer();
    }

    tokenizer.tokenize(sequence);
    statementList = tokenizer.getStatementList();

    return parse();
  }
 /** Add the set tokens for Parser's Tokenizer */
 private void initialiseTokenizer() {
   tokenizer.addToken("sin|cos|exp|ln|sqrt", FUNCTION);
   tokenizer.addToken("\\(", LPAREN);
   tokenizer.addToken("\\)", RPAREN);
   tokenizer.addToken("[+-]", PLUSMINUS);
   tokenizer.addToken("[*/]", MULTDIV);
   tokenizer.addToken("\\<|\\>|\\<\\=|\\>\\=|\\!\\=", COMPARATOR);
   tokenizer.addToken("\\^", RAISED);
   tokenizer.addToken("[0-9]+", NUMBER);
   tokenizer.addToken("\\$[a-zA-Z][a-zA-Z0-9_]*", VARIABLE);
   tokenizer.addToken("\\=", EQUALS);
   tokenizer.addToken("\\;", ITokens.SEMICOLON);
   tokenizer.addToken("print", PRINT);
 }