summaryrefslogtreecommitdiff
path: root/JPratt/src/main/java/com/ashardalon/pratt/commands/BranchInitialCommand.java
blob: 0e17287ff76c3c08898bbfb2cf1eafb56c783f32 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.ashardalon.pratt.commands;

import java.util.Map;

import com.ashardalon.pratt.ParserContext;
import com.ashardalon.pratt.tokens.Token;

import bjc.utils.parserutils.ParserException;

/**
 * Represents a initial command that has a number of 'sub-commands' in the way that Go/Git CLI does.
 * 
 * @author bjcul
 *
 * @param <K> Token key type
 * @param <V> Token value type
 * @param <C> Parser context type
 */
public class BranchInitialCommand<K, V, C> implements InitialCommand<K, V, C> {
	private Map<K, InitialCommand<K, V, C>> comMap;
	
	/**
	 * Create a new branch initial command
	 * 
	 * @param mep The map containing the commands
	 */
	public BranchInitialCommand(Map<K, InitialCommand<K, V, C>> mep) {
		this.comMap = mep;
	}
	
	@Override
	public CommandResult<K, V> denote(Token<K, V> operator, ParserContext<K, V, C> ctx) throws ParserException {
		Token<K, V> curToken = ctx.tokens.current();
		ctx.tokens.expect(comMap.keySet());
		
		return comMap.get(curToken.getKey()).denote(curToken, ctx);
	}

}