01: package fri.patterns.interpreter.parsergenerator;
02:
03: import java.util.List;
04: import java.util.Map;
05: import java.io.PrintStream;
06: import fri.patterns.interpreter.parsergenerator.syntax.Syntax;
07:
08: /**
09: Responsibilities of (bottom-up) parser tables, that must provide:
10: <ul>
11: <li>all terminals, without EPSILON (for the Lexer)</li>
12: <li>the syntax</li>
13: <li>the follow-state from the GOTO-table</li>
14: <li>the follow action from the PARSE-ACTION-table</li>
15: <li>a list of expected terminals</li>
16: </ul>
17:
18: @author (c) 2000, Fritz Ritzberger
19: */
20:
21: public interface ParserTables {
22: /** Special symbol occuring in a parser table, 0, means: syntax was correct when coming to that cell. */
23: public static final Integer ACCEPT = new Integer(0);
24:
25: /** Special symbol occuring in a parser table, -1, means: error when coming to that cell. */
26: public static final Integer ERROR = new Integer(-1);
27:
28: /** Special symbol occuring in a parser table, -2, means: read next token. */
29: public static final Integer SHIFT = new Integer(-2);
30:
31: /**
32: Returns the next state from the GOTO-table, for a given state and a received terminal or nonterminal.
33: @param currentState the current parser state
34: @param symbol recently received terminal or nonterminal
35: @return new parser state
36: */
37: public Integer getGotoState(Integer currentState, String symbol);
38:
39: /**
40: Returns the action from the PARSE-ACTION-table, for a given state and received terminal.
41: fuer einen gegebenen Zustand und ein Terminal.
42: @param currentState the current parser state
43: @param terminal recently received terminal
44: @return new action to proceed, SHIFT, ACCEPT, ERROR, or anything above zero, meaning REDUCE.
45: */
46: public Integer getParseAction(Integer currentState, String terminal);
47:
48: /**
49: Returns the List of treminals, without EPSILON.
50: */
51: public List getTerminals();
52:
53: /**
54: Returns the input syntax.
55: */
56: public Syntax getSyntax();
57:
58: /**
59: Dumps rules, GOTO-table, PARSE-ACTION-table, FIRST and FOLLOW sets, ...
60: */
61: public void dump(PrintStream out);
62:
63: /**
64: The keySet of returned Map contains all expected terminals for the current state.
65: These can be used as Lexer hints.
66: */
67: public Map getExpected(Integer state);
68:
69: }
|