Skip to content

Method: parse()

1: package de.fhdw.wtf.parser;
2:
3: import java.util.Collection;
4:
5: import de.fhdw.wtf.common.ast.type.ProductElementType;
6: import de.fhdw.wtf.common.ast.type.Type;
7: import de.fhdw.wtf.common.exception.parser.AbstractParserException;
8: import de.fhdw.wtf.common.stream.TokenStream;
9: import de.fhdw.wtf.common.token.IdentifierToken;
10:
11: /**
12: * Parses tokens to {@link ProductElementType}.
13: */
14: final class ParameterParser {
15:         
16:         /**
17:          * TokenStream.
18:          */
19:         private final TokenStream stream;
20:         
21:         /**
22:          * Collection of exceptions.
23:          */
24:         private final Collection<AbstractParserException> exceptions;
25:         
26:         /**
27:          * Constructor of {@link ParameterParser}.
28:          *
29:          * @param stream
30:          * tokenStream
31:          * @param exceptions
32:          * collection of exceptions
33:          */
34:         private ParameterParser(final TokenStream stream, final Collection<AbstractParserException> exceptions) {
35:                 this.stream = stream;
36:                 this.exceptions = exceptions;
37:         }
38:         
39:         /**
40:          * FactoryMethod for {@link ParameterParser}.
41:          *
42:          * @param stream
43:          * tokenStream
44:          * @param exceptions
45:          * collection of exceptions
46:          * @return The {@link ParameterParser}-Object.
47:          */
48:         static ParameterParser create(final TokenStream stream, final Collection<AbstractParserException> exceptions) {
49:                 return new ParameterParser(stream, exceptions);
50:         }
51:         
52:         /**
53:          * Parses the next series of Token of this.stream to {@link ProductElementType}.
54:          *
55:          * @return ProductElementType
56:          * @throws AbstractParserException
57:          * AbstractParserException
58:          */
59:         ProductElementType parse() throws AbstractParserException {
60:                 final IdentifierToken identiferToken = ParserUtils.requireAndRemoveIdentifier(this.stream);
61:                 ParserUtils.requireAndRemoveColonToken(this.stream);
62:                 final Type type = TypeParser.create(this.stream, this.exceptions).parse();
63:                 final ProductElementType param =
64:                                 ProductElementType.create(
65:                                                 identiferToken.stringRepresentation(),
66:                                                 type,
67:                                                 identiferToken,
68:                                                 this.stream.peek());
69:                 return param;
70:         }
71: }