|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--fri.patterns.interpreter.parsergenerator.Parser
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()
Field Summary | |
protected java.util.Stack |
rangeStack
|
protected java.util.Stack |
stateStack
|
protected java.util.Stack |
valueStack
|
Constructor Summary | |
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,
java.lang.Integer state,
java.lang.Integer action)
Called after parse loop to determine if everything was OK. |
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. |
ParserTables |
getParserTables()
Returns current ParserTables. |
java.lang.Object |
getResult()
Returns the parsing result built from Semantic call return values. |
Semantic |
getSemantic()
Returns the semantic that was set to this parser. |
boolean |
parse()
Start parsing after setting Lexer and optionally Semantic. |
boolean |
parse(Lexer lexer)
Parse the tokens returned from passed lexer. |
boolean |
parse(Lexer lexer,
Semantic semantic)
Parse the tokens returned from passed lexer. |
boolean |
parse(java.lang.Object input)
Parse the tokens returned from passed input. |
boolean |
parse(java.lang.Object input,
Semantic semantic)
Parse the tokens returned from passed lexer. |
boolean |
parse(Semantic semantic)
Parse the tokens returned from passed lexer. |
protected java.lang.Integer |
recover(java.lang.Integer action,
Token token)
Recover from error. |
protected void |
reduce(java.lang.Integer ruleIndex)
Reduce a rule when input satisfied it. |
void |
setDebug(boolean debug)
Set the debug mode. |
void |
setInput(java.lang.Object input)
Sets the input to contained lexer, or throws IllegalStateException if no lexer was set. |
void |
setLexer(Lexer lexer)
Sets the lexer to be used for parsing. |
void |
setPassExpectedToLexer(boolean passExpectedToLexer)
Default is true. |
void |
setPrintStream(java.io.PrintStream out)
Debug output will go to passed stream. |
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. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
protected java.util.Stack stateStack
protected java.util.Stack valueStack
protected java.util.Stack rangeStack
Constructor Detail |
public Parser(ParserTables tables)
tables
- ParserTables representing the syntax.Method Detail |
public java.lang.Object getResult()
public void setLexer(Lexer lexer)
public Lexer getLexer()
public void setInput(java.lang.Object input) throws java.io.IOException
java.io.IOException
public void setSemantic(Semantic semantic)
public Semantic getSemantic()
public ParserTables getParserTables()
public void setPassExpectedToLexer(boolean passExpectedToLexer)
protected void reduce(java.lang.Integer ruleIndex)
protected Token shift(Token token) throws java.io.IOException
java.io.IOException
protected Token getNextToken() throws java.io.IOException
java.io.IOException
public boolean parse(Lexer lexer) throws java.io.IOException
lexer
- the Lexer, loaded with input to scan.
java.io.IOException
public boolean parse(Semantic semantic) throws java.io.IOException
semantic
- the semantic to apply to parser results.
java.io.IOException
public boolean parse(java.lang.Object input) throws java.io.IOException
input
- the input to parse, as File, InputStream, String, ....
java.io.IOException
public boolean parse(Lexer lexer, Semantic semantic) throws java.io.IOException
lexer
- Lexer containing the input to parsesemantic
- the semantic to apply to parser results.
java.io.IOException
public boolean parse(java.lang.Object input, Semantic semantic) throws java.io.IOException
input
- the input to parse, as File, InputStream, String, ....semantic
- the semantic to apply to parser results.
java.io.IOException
public boolean parse() throws java.io.IOException
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().
java.io.IOException
protected java.lang.Integer recover(java.lang.Integer action, Token token)
action
- current action from PARSE-ACTION table.token
- recently received Token.
protected boolean detectError(Token token, java.lang.Integer state, java.lang.Integer action)
public void setPrintStream(java.io.PrintStream out)
public void setDebug(boolean debug)
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |