code: private final DiceNotationParser
              buildDiceNotationParser(final String expression) {
          final CharStream stream;
          final DiceNotationLexer lexer;
          final TokenStream tokens;
          final DiceNotationParser parser;
  
          stream = CharStreams.fromString(expression);
  
          lexer = new DiceNotationLexer(stream);
          lexer.addErrorListener(errorListener);
  
          tokens = new CommonTokenStream(lexer);
  
          parser = new DiceNotationParser(tokens);
          parser.addErrorListener(errorListener);
          parser.addParseListener(expressionBuilder);
  
          return parser;
      }
docs: Creates the ANTLR4 parser to be used for processing the dice expression.
  <p>
  This parser will be tailored to the received expression, but it will
  still need a listener which, using the visitor pattern, will create the
  final object.
  
  @param expression
  expression used to generate the parser
  @return an ANTLR4 parser tailored for the expression