code: @Override
      public Expression parse(String input) {
          tokens = lexer.tokenize(input);
          Expression expr = parseSemVerExpression();
          consumeNextToken(EOI);
          return expr;
      }
docs: Parses the SemVer Expressions.
  
  @param input a string representing the SemVer Expression
  @return the AST for the SemVer Expressions
  @throws LexerException when encounters an illegal character
  @throws UnexpectedTokenException when consumes a token of an unexpected type