| java.lang.Object fri.patterns.interpreter.parsergenerator.Parser
Parser | public class Parser implements Serializable(Code) | | The universal bottom-up parser algorithm. Runs with a Lexer (containing the input),
ParserTables (containing the syntax), and a Semantic (optional).
private static final String [][] syntax = {
{ "Start", "\"Hello\"", "\"World\"" },
{ Token.IGNORED, "`whitespaces`" },
};
SyntaxSeparation separation = new SyntaxSeparation(new Syntax(syntax));
LexerBuilder builder = new LexerBuilder(separation.getLexerSyntax(), separation.getIgnoredSymbols());
Lexer lexer = builder.getLexer();
lexer.setInput("\tHello \r\n\tWorld\n");
ParserTables parserTables = new SLRParserTables(separation.getParserSyntax());
Parser parser = new Parser(parserTables);
parser.parse(lexer, new PrintSemantic());
TODO: implement error recovery: method recover()
author: (c) 2000, Fritz Ritzberger |
Constructor Summary | |
public | Parser(ParserTables tables) Create a generic bottom-up Parser with passed ParserTables (representing the current syntax to apply). |
Method Summary | |
protected boolean | detectError(Token token, Integer state, Integer action) Called after parse loop to determine if everything was OK. | public Lexer | getLexer() Returns the lexer that was set to this parser, to call setInput() to the lexer. | protected Token | getNextToken() Delivers the next token from lexer to parser. | public ParserTables | getParserTables() Returns current ParserTables. | public Object | getResult() Returns the parsing result built from Semantic call return values. | public Semantic | getSemantic() Returns the semantic that was set to this parser. | public boolean | parse(Lexer lexer) Parse the tokens returned from passed lexer. | public boolean | parse(Semantic semantic) Parse the tokens returned from passed lexer. | public boolean | parse(Object input) Parse the tokens returned from passed input.
At least setLexer() must have been called before.
Parameters: input - the input to parse, as File, InputStream, String, .... | public boolean | parse(Lexer lexer, Semantic semantic) Parse the tokens returned from passed lexer. | public boolean | parse(Object input, Semantic semantic) Parse the tokens returned from passed lexer. | public boolean | parse() Start parsing after setting Lexer and optionally Semantic. | protected Integer | recover(Integer action, Token token) Recover from error. | protected void | reduce(Integer ruleIndex) Reduce a rule when input satisfied it. | public void | setDebug(boolean debug) Set the debug mode. | public void | setInput(Object input) Sets the input to contained lexer, or throws IllegalStateException if no lexer was set. | public void | setLexer(Lexer lexer) Sets the lexer to be used for parsing. | public void | setPassExpectedToLexer(boolean passExpectedToLexer) Default is true. | public void | setPrintStream(PrintStream out) Debug output will go to passed stream. | public void | setSemantic(Semantic semantic) Sets the semantic to be applied to parsing results. | protected Token | shift(Token token) Push a new state upon state stack, determined by the GOTO table with current state
and the received token symbol. |
Parser | public Parser(ParserTables tables)(Code) | | Create a generic bottom-up Parser with passed ParserTables (representing the current syntax to apply).
Parameters: tables - ParserTables representing the syntax. |
detectError | protected boolean detectError(Token token, Integer state, Integer action)(Code) | | Called after parse loop to determine if everything was OK.
true when action is ACCEPT, token.symbol is EPSILON, and state is not ERROR. |
getLexer | public Lexer getLexer()(Code) | | Returns the lexer that was set to this parser, to call setInput() to the lexer.
|
getNextToken | protected Token getNextToken() throws IOException(Code) | | Delivers the next token from lexer to parser. Override to convert the Token value.
|
getResult | public Object getResult()(Code) | | Returns the parsing result built from Semantic call return values. Retrievable after parsing.
|
getSemantic | public Semantic getSemantic()(Code) | | Returns the semantic that was set to this parser.
|
parse | public boolean parse(Lexer lexer) throws IOException(Code) | | Parse the tokens returned from passed lexer. This call is for checking correctness without semantics.
Parameters: lexer - the Lexer, loaded with input to scan. true when input was syntactically correct. |
parse | public boolean parse(Semantic semantic) throws IOException(Code) | | Parse the tokens returned from passed lexer. This call is for processing input with semantics.
At least setLexer() must have been called before.
Parameters: semantic - the semantic to apply to parser results. true when input was syntactically correct. |
parse | public boolean parse(Object input) throws IOException(Code) | | Parse the tokens returned from passed input.
At least setLexer() must have been called before.
Parameters: input - the input to parse, as File, InputStream, String, .... true when input was syntactically correct. |
parse | public boolean parse(Lexer lexer, Semantic semantic) throws IOException(Code) | | Parse the tokens returned from passed lexer. This call is for integrating a semantic.
Parameters: lexer - Lexer containing the input to parse Parameters: semantic - the semantic to apply to parser results. true when input was syntactically correct. |
parse | public boolean parse(Object input, Semantic semantic) throws IOException(Code) | | Parse the tokens returned from passed lexer. This call is for integrating a semantic.
Parameters: input - the input to parse, as File, InputStream, String, .... Parameters: semantic - the semantic to apply to parser results. true when input was syntactically correct. |
parse | public boolean parse() throws IOException(Code) | | Start parsing after setting Lexer and optionally Semantic. At least setLexer() must have been called before.
Init the parser, read first token, push state 0 and set action to SHIFT.
Loop while action is not ERROR or ACCEPT, and token symbol is not ERROR, and top of stack is not ERROR.
Within loop, get next action from PARSE-ACTION table using current state and token symbol.
When action greater than zero, call reduce(), else when action is SHIFT, call shift().
true when input was syntactically correct. |
recover | protected Integer recover(Integer action, Token token)(Code) | | Recover from error. Not implemented.
Parameters: action - current action from PARSE-ACTION table. Parameters: token - recently received Token. action to proceed with. Token.symbol may not be null and current state may not be ERROR after this call. |
reduce | protected void reduce(Integer ruleIndex)(Code) | | Reduce a rule when input satisfied it. Pop the stack n times, n is the number of right symbols of the rule.
Semantic gets called with all input tokens corresponding to the rule, if not null.
A new state gets pushed, determined by the new state (after pops) and the nonterminal of the rule (left side).
|
setDebug | public void setDebug(boolean debug)(Code) | | Set the debug mode.
|
setInput | public void setInput(Object input) throws IOException(Code) | | Sets the input to contained lexer, or throws IllegalStateException if no lexer was set.
|
setLexer | public void setLexer(Lexer lexer)(Code) | | Sets the lexer to be used for parsing. The Lexer contains (or will contain) the input to parse.
The Parser calls setTerminals() on this call.
|
setPassExpectedToLexer | public void setPassExpectedToLexer(boolean passExpectedToLexer)(Code) | | Default is true. When true, the Parser will pass a Map of expected symbols to Lexer at every token request.
|
setPrintStream | public void setPrintStream(PrintStream out)(Code) | | Debug output will go to passed stream.
|
setSemantic | public void setSemantic(Semantic semantic)(Code) | | Sets the semantic to be applied to parsing results.
|
shift | protected Token shift(Token token) throws IOException(Code) | | Push a new state upon state stack, determined by the GOTO table with current state
and the received token symbol. Then read a new token from Lexer, trying to evaluate a rule.
|
|
|