📄 lalrparsertables.java
字号:
package fri.patterns.interpreter.parsergenerator.parsertables;import fri.patterns.interpreter.parsergenerator.syntax.Syntax;/** Parser table generator for LALR interpretation. @see fri.patterns.interpreter.parsergenerator.parsertables.LRParserTables @author (c) 2000, Fritz Ritzberger*/public class LALRParserTables extends LRParserTables{ /** Calls super. */ public LALRParserTables(Syntax syntax) throws ParserBuildException { super(syntax); } /** Factory method: constructing a root node for LALR syntax nodes. */ protected LRSyntaxNode createStartNode(Nullable nullable, FirstSets firstSets) { return new LALRSyntaxNode(nullable, firstSets); } /** Test main dumping parser tables. */ public static void main(String [] args) { /* String [][] syntax = { { "EXPR", "TERM" }, { "EXPR", "EXPR", "'+'", "TERM" }, { "EXPR", "EXPR", "'-'", "TERM" }, { "TERM", "FAKT", }, { "TERM", "TERM", "'*'", "FAKT" }, { "TERM", "TERM", "'/'", "FAKT" }, { "FAKT", "\"[0-9]+\"", }, { "FAKT", "'('", "EXPR", "')'" }, }; */ String [][] syntax = { { "S", "L", "'='", "R" }, { "S", "R" }, { "L", "'*'", "R" }, { "L", "'id'" }, { "R", "L", }, }; try { LALRParserTables p = new LALRParserTables(new Syntax(syntax)); p.dump(System.err); } catch (Exception e) { e.printStackTrace(); } } }/*(Rule 0) <START> : (Rule 1) S : '=' R (Rule 2) S : (Rule 3) L : R (Rule 4) L : (Rule 5) R : FIRST(L) = ['*', 'id']FIRST(S) = ['*', 'id']FIRST(R) = ['*', 'id']FIRST(<START>) = ['*', 'id']State 0 (Rule 0) <START> : .S LOOKAHEAD["EoI"] -> State 5 (Rule 1) S : .L '=' R LOOKAHEAD["EoI"] -> State 4 (Rule 2) S : .R LOOKAHEAD["EoI"] -> State 3 (Rule 3) L : .'*' R LOOKAHEAD['=', "EoI"] -> State 2 (Rule 4) L : .'id' LOOKAHEAD['=', "EoI"] -> State 1 (Rule 5) R : .L LOOKAHEAD["EoI"] -> State 4State 1 (Rule 4) L : 'id' . ['=', "EoI"]State 2 (Rule 3) L : '*' .R LOOKAHEAD['=', "EoI"] -> State 6 (Rule 3) L : .'*' R LOOKAHEAD['=', "EoI"] -> State 2 (Rule 4) L : .'id' LOOKAHEAD['=', "EoI"] -> State 1 (Rule 5) R : .L LOOKAHEAD['=', "EoI"] -> State 7State 3 (Rule 2) S : R . ["EoI"]State 4 (Rule 1) S : L .'=' R LOOKAHEAD["EoI"] -> State 8 (Rule 5) R : L . ["EoI"]State 5 (Rule 0) <START> : S . ["EoI"]State 6 (Rule 3) L : '*' R . ['=', "EoI"]State 7 (Rule 5) R : L . ['=', "EoI"]State 8 (Rule 1) S : L '=' .R LOOKAHEAD["EoI"] -> State 9 (Rule 3) L : .'*' R LOOKAHEAD["EoI"] -> State 2 (Rule 4) L : .'id' LOOKAHEAD["EoI"] -> State 1 (Rule 5) R : .L LOOKAHEAD["EoI"] -> State 7State 9 (Rule 1) S : L '=' R . ["EoI"]GOTO TABLE========== | <START> S L R '=' '*' 'id'________________________________________________________________ 0 | - 5 4 3 - 2 1 1 | - - - - - - - 2 | - - 7 6 - 2 1 3 | - - - - - - - 4 | - - - - 8 - - 5 | - - - - - - - 6 | - - - - - - - 7 | - - - - - - - 8 | - - 7 9 - 2 1 9 | - - - - - - -PARSE-ACTION TABLE================== | '=' '*' 'id' <EOF>________________________________________ 0 | - SH SH - 1 | 4 - - 4 2 | - SH SH - 3 | - - - 2 4 | SH - - 5 5 | - - - AC 6 | 3 - - 3 7 | 5 - - 5 8 | - SH SH - 9 | - - - 1*//*(Rule 0) <START> : EXPR (Rule 1) EXPR : TERM (Rule 2) EXPR : EXPR '+' TERM (Rule 3) EXPR : EXPR '-' TERM (Rule 4) TERM : FAKT (Rule 5) TERM : TERM '*' FAKT (Rule 6) TERM : TERM '/' FAKT (Rule 7) FAKT : "[0-9]+" (Rule 8) FAKT : '(' EXPR ')' FIRST(EXPR) = ["[0-9]+", '(']FIRST(FAKT) = ["[0-9]+", '(']FIRST(<START>) = ["[0-9]+", '(']FIRST(TERM) = ["[0-9]+", '(']State 0 (Rule 0) <START> : .EXPR LOOKAHEAD["EoI"] -> State 2 (Rule 1) EXPR : .TERM LOOKAHEAD['+', '-', "EoI"] -> State 1 (Rule 2) EXPR : .EXPR '+' TERM LOOKAHEAD['+', '-', "EoI"] -> State 2 (Rule 3) EXPR : .EXPR '-' TERM LOOKAHEAD['+', '-', "EoI"] -> State 2 (Rule 4) TERM : .FAKT LOOKAHEAD['+', '-', '/', '*', "EoI"] -> State 4 (Rule 5) TERM : .TERM '*' FAKT LOOKAHEAD['+', '-', '/', '*', "EoI"] -> State 1 (Rule 6) TERM : .TERM '/' FAKT LOOKAHEAD['+', '-', '/', '*', "EoI"] -> State 1 (Rule 7) FAKT : ."[0-9]+" LOOKAHEAD['+', '-', '/', '*', "EoI"] -> State 5 (Rule 8) FAKT : .'(' EXPR ')' LOOKAHEAD['+', '-', '/', '*', "EoI"] -> State 3State 1 (Rule 1) EXPR : TERM . ['+', '-', ')', "EoI"] (Rule 5) TERM : TERM .'*' FAKT LOOKAHEAD['+', '-', ')', '/', '*', "EoI"] -> State 7 (Rule 6) TERM : TERM .'/' FAKT LOOKAHEAD['+', '-', ')', '/', '*', "EoI"] -> State 6State 2 (Rule 0) <START> : EXPR . ["EoI"] (Rule 2) EXPR : EXPR .'+' TERM LOOKAHEAD['+', '-', "EoI"] -> State 9 (Rule 3) EXPR : EXPR .'-' TERM LOOKAHEAD['+', '-', "EoI"] -> State 8State 3 (Rule 1) EXPR : .TERM LOOKAHEAD['+', '-', ')'] -> State 1 (Rule 2) EXPR : .EXPR '+' TERM LOOKAHEAD['+', '-', ')'] -> State 10 (Rule 3) EXPR : .EXPR '-' TERM LOOKAHEAD['+', '-', ')'] -> State 10 (Rule 4) TERM : .FAKT LOOKAHEAD['+', '-', ')', '/', '*'] -> State 4 (Rule 5) TERM : .TERM '*' FAKT LOOKAHEAD['+', '-', ')', '/', '*'] -> State 1 (Rule 6) TERM : .TERM '/' FAKT LOOKAHEAD['+', '-', ')', '/', '*'] -> State 1 (Rule 7) FAKT : ."[0-9]+" LOOKAHEAD['+', '-', ')', '/', '*'] -> State 5 (Rule 8) FAKT : '(' .EXPR ')' LOOKAHEAD['+', '-', ')', '/', '*', "EoI"] -> State 10 (Rule 8) FAKT : .'(' EXPR ')' LOOKAHEAD['+', '-', ')', '/', '*'] -> State 3State 4 (Rule 4) TERM : FAKT . ['+', '-', ')', '/', '*', "EoI"]State 5 (Rule 7) FAKT : "[0-9]+" . ['+', '-', ')', '/', '*', "EoI"]State 6 (Rule 6) TERM : TERM '/' .FAKT LOOKAHEAD['+', '-', ')', '/', '*', "EoI"] -> State 11 (Rule 7) FAKT : ."[0-9]+" LOOKAHEAD['+', '-', ')', '/', '*', "EoI"] -> State 5 (Rule 8) FAKT : .'(' EXPR ')' LOOKAHEAD['+', '-', ')', '/', '*', "EoI"] -> State 3State 7 (Rule 5) TERM : TERM '*' .FAKT LOOKAHEAD['+', '-', ')', '/', '*', "EoI"] -> State 12 (Rule 7) FAKT : ."[0-9]+" LOOKAHEAD['+', '-', ')', '/', '*', "EoI"] -> State 5 (Rule 8) FAKT : .'(' EXPR ')' LOOKAHEAD['+', '-', ')', '/', '*', "EoI"] -> State 3State 8 (Rule 3) EXPR : EXPR '-' .TERM LOOKAHEAD['+', '-', ')', "EoI"] -> State 13 (Rule 4) TERM : .FAKT LOOKAHEAD['+', '-', ')', '/', '*', "EoI"] -> State 4 (Rule 5) TERM : .TERM '*' FAKT LOOKAHEAD['+', '-', ')', '/', '*', "EoI"] -> State 13 (Rule 6) TERM : .TERM '/' FAKT LOOKAHEAD['+', '-', ')', '/', '*', "EoI"] -> State 13 (Rule 7) FAKT : ."[0-9]+" LOOKAHEAD['+', '-', ')', '/', '*', "EoI"] -> State 5 (Rule 8) FAKT : .'(' EXPR ')' LOOKAHEAD['+', '-', ')', '/', '*', "EoI"] -> State 3State 9 (Rule 2) EXPR : EXPR '+' .TERM LOOKAHEAD['+', '-', ')', "EoI"] -> State 14 (Rule 4) TERM : .FAKT LOOKAHEAD['+', '-', ')', '/', '*', "EoI"] -> State 4 (Rule 5) TERM : .TERM '*' FAKT LOOKAHEAD['+', '-', ')', '/', '*', "EoI"] -> State 14 (Rule 6) TERM : .TERM '/' FAKT LOOKAHEAD['+', '-', ')', '/', '*', "EoI"] -> State 14 (Rule 7) FAKT : ."[0-9]+" LOOKAHEAD['+', '-', ')', '/', '*', "EoI"] -> State 5 (Rule 8) FAKT : .'(' EXPR ')' LOOKAHEAD['+', '-', ')', '/', '*', "EoI"] -> State 3State 10 (Rule 2) EXPR : EXPR .'+' TERM LOOKAHEAD['+', '-', ')'] -> State 9 (Rule 3) EXPR : EXPR .'-' TERM LOOKAHEAD['+', '-', ')'] -> State 8 (Rule 8) FAKT : '(' EXPR .')' LOOKAHEAD['+', '-', ')', '/', '*', "EoI"] -> State 15State 11 (Rule 6) TERM : TERM '/' FAKT . ['+', '-', ')', '/', '*', "EoI"]State 12 (Rule 5) TERM : TERM '*' FAKT . ['+', '-', ')', '/', '*', "EoI"]State 13 (Rule 3) EXPR : EXPR '-' TERM . ['+', '-', ')', "EoI"] (Rule 5) TERM : TERM .'*' FAKT LOOKAHEAD['+', '-', ')', '/', '*', "EoI"] -> State 7 (Rule 6) TERM : TERM .'/' FAKT LOOKAHEAD['+', '-', ')', '/', '*', "EoI"] -> State 6State 14 (Rule 2) EXPR : EXPR '+' TERM . ['+', '-', ')', "EoI"] (Rule 5) TERM : TERM .'*' FAKT LOOKAHEAD['+', '-', ')', '/', '*', "EoI"] -> State 7 (Rule 6) TERM : TERM .'/' FAKT LOOKAHEAD['+', '-', ')', '/', '*', "EoI"] -> State 6State 15 (Rule 8) FAKT : '(' EXPR ')' . ['+', '-', ')', '/', '*', "EoI"]GOTO TABLE========== | <START> EXPR TERM FAKT '+' '-' '*' '/' "[0-9]+ '(' ')'________________________________________________________________________________________________ 0 | - 2 1 4 - - - - 5 3 - 1 | - - - - - - 7 6 - - - 2 | - - - - 9 8 - - - - - 3 | - 10 1 4 - - - - 5 3 - 4 | - - - - - - - - - - - 5 | - - - - - - - - - - - 6 | - - - 11 - - - - 5 3 - 7 | - - - 12 - - - - 5 3 - 8 | - - 13 4 - - - - 5 3 - 9 | - - 14 4 - - - - 5 3 - 10 | - - - - 9 8 - - - - 15 11 | - - - - - - - - - - - 12 | - - - - - - - - - - - 13 | - - - - - - 7 6 - - - 14 | - - - - - - 7 6 - - - 15 | - - - - - - - - - - -PARSE-ACTION TABLE================== | '+' '-' '*' '/' "[0-9]+ '(' ')' <EOF>________________________________________________________________________ 0 | - - - - SH SH - - 1 | 1 1 SH SH - - 1 1 2 | SH SH - - - - - AC 3 | - - - - SH SH - - 4 | 4 4 4 4 - - 4 4 5 | 7 7 7 7 - - 7 7 6 | - - - - SH SH - - 7 | - - - - SH SH - - 8 | - - - - SH SH - - 9 | - - - - SH SH - - 10 | SH SH - - - - SH - 11 | 6 6 6 6 - - 6 6 12 | 5 5 5 5 - - 5 5 13 | 3 3 SH SH - - 3 3 14 | 2 2 SH SH - - 2 2 15 | 8 8 8 8 - - 8 8*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -