(1) | S | -> | ε | | ε |
(2) | S | -> | function func_name ( Params ) { Block } S | | function |
(3) | S | -> | Cmd S | | { ; return break continue while for if - ! bool_val int_val float_val string_val ( ++ -- var func_name |
(4) | Params | -> | var Params_c | | var |
(5) | Params | -> | ε | | ε |
(6) | Params_c | -> | , var Params_c | | , |
(7) | Params_c | -> | ε | | ε |
(8) | Cmd | -> | { Block } | | { |
(9) | Cmd | -> | ; | | ; |
(10) | Cmd | -> | E ; | | - ! bool_val int_val float_val string_val ( ++ -- var func_name |
(11) | Cmd | -> | return E ; | | return |
(12) | Cmd | -> | break ; | | break |
(13) | Cmd | -> | continue ; | | continue |
(14) | Cmd | -> | while ( E ) Cmd | | while |
(15) | Cmd | -> | for ( Ee ; Ee ; Ee ) Cmd | | for |
(16) | Cmd | -> | if ( E ) Cmd Cmd_c | | if |
(17) | Cmd_c | -> | else Cmd | | else |
(18) | Cmd_c | -> | ε | | ε |
(19) | Block | -> | Cmd Block | | { ; return break continue while for if - ! bool_val int_val float_val string_val ( ++ -- var func_name |
(20) | Block | -> | ε | | ε |
(21) | Ee | -> | E | | - ! bool_val int_val float_val string_val ( ++ -- var func_name |
(22) | Ee | -> | ε | | ε |
(23) | E | -> | A E_c | | bool_val int_val float_val string_val ( ++ -- var func_name |
(24) | E | -> | - A E_c | | - |
(25) | E | -> | ! A E_c | | ! |
(26) | E_c | -> | = A E_c | | = |
(27) | E_c | -> | += A E_c | | += |
(28) | E_c | -> | -= A E_c | | -= |
(29) | E_c | -> | *= A E_c | | *= |
(30) | E_c | -> | /= A E_c | | /= |
(31) | E_c | -> | %= A E_c | | %= |
(32) | E_c | -> | ε | | ε |
(33) | A | -> | B A_c | | bool_val int_val float_val string_val ( ++ -- var func_name |
(34) | A_c | -> | || B A_c | | || |
(35) | A_c | -> | ε | | ε |
(36) | B | -> | C B_c | | bool_val int_val float_val string_val ( ++ -- var func_name |
(37) | B_c | -> | && C B_c | | && |
(38) | B_c | -> | ε | | ε |
(39) | C | -> | D C_c | | bool_val int_val float_val string_val ( ++ -- var func_name |
(40) | C_c | -> | < D C_c | | < |
(41) | C_c | -> | > D C_c | | > |
(42) | C_c | -> | <= D C_c | | <= |
(43) | C_c | -> | >= D C_c | | >= |
(44) | C_c | -> | == D C_c | | == |
(45) | C_c | -> | != D C_c | | != |
(46) | C_c | -> | ε | | ε |
(47) | D | -> | F D_c | | bool_val int_val float_val string_val ( ++ -- var func_name |
(48) | D_c | -> | + F D_c | | + |
(49) | D_c | -> | - F D_c | | - |
(50) | D_c | -> | ε | | ε |
(51) | F | -> | G F_c | | bool_val int_val float_val string_val ( ++ -- var func_name |
(52) | F_c | -> | * G F_c | | * |
(53) | F_c | -> | / G F_c | | / |
(54) | F_c | -> | % G F_c | | % |
(55) | F_c | -> | ε | | ε |
(56) | G | -> | bool_val | | bool_val |
(57) | G | -> | int_val | | int_val |
(58) | G | -> | float_val | | float_val |
(59) | G | -> | string_val | | string_val |
(60) | G | -> | ( E ) | | ( |
(61) | G | -> | ++ var | | ++ |
(62) | G | -> | -- var | | -- |
(63) | G | -> | var G_c | | var |
(64) | G | -> | func_name ( L ) | | func_name |
(65) | G_c | -> | ++ | | ++ |
(66) | G_c | -> | -- | | -- |
(67) | G_c | -> | ε | | ε |
(68) | L | -> | E L_c | | - ! bool_val int_val float_val string_val ( ++ -- var func_name |
(69) | L | -> | ε | | ε |
(70) | L_c | -> | , E L_c | | , |
(71) | L_c | -> | ε | | ε |
S | | ε |
Params | | ) |
Params_c | | ) |
Block | | } |
Cmd | | ε } function else { ; return break continue while for if - ! bool_val int_val float_val string_val ( ++ -- var func_name |
Cmd_c | | ε } function else { ; return break continue while for if - ! bool_val int_val float_val string_val ( ++ -- var func_name |
Ee | | ; ) |
E | | ; ) , |
E_c | | ; ) , |
A | | ; ) = += -= *= /= %= , |
A_c | | ; ) = += -= *= /= %= , |
B | | ; ) || = += -= *= /= %= , |
B_c | | ; ) || = += -= *= /= %= , |
C | | ; ) && || = += -= *= /= %= , |
C_c | | ; ) && || = += -= *= /= %= , |
D | | ; ) < > <= >= == != && || = += -= *= /= %= , |
D_c | | ; ) < > <= >= == != && || = += -= *= /= %= , |
F | | ; ) + - < > <= >= == != && || = += -= *= /= %= , |
F_c | | ; ) + - < > <= >= == != && || = += -= *= /= %= , |
G | | ; ) * / % + - < > <= >= == != && || = += -= *= /= %= , |
G_c | | ; ) * / % + - < > <= >= == != && || = += -= *= /= %= , |
L | | ) |
L_c | | ) |
| | FIRST1 | FOLLOW1 |
(1) | S -> ε | ε | ε |
(2) | S -> function func_name ( Params ) { Block } S | function |
(3) | S -> Cmd S | { ; return break continue while for if - ! bool_val int_val float_val string_val ( ++ -- var func_name |
(4) | Params -> var Params_c | var | ) |
(5) | Params -> ε | ε |
(6) | Params_c -> , var Params_c | , | ) |
(7) | Params_c -> ε | ε |
(8) | Cmd -> { Block } | { | ε } function else { ; return break continue while for if - ! bool_val int_val float_val string_val ( ++ -- var func_name |
(9) | Cmd -> ; | ; |
(10) | Cmd -> E ; | - ! bool_val int_val float_val string_val ( ++ -- var func_name |
(11) | Cmd -> return E ; | return |
(12) | Cmd -> break ; | break |
(13) | Cmd -> continue ; | continue |
(14) | Cmd -> while ( E ) Cmd | while |
(15) | Cmd -> for ( Ee ; Ee ; Ee ) Cmd | for |
(16) | Cmd -> if ( E ) Cmd Cmd_c | if |
(17) | Cmd_c -> else Cmd | else | ε } function else { ; return break continue while for if - ! bool_val int_val float_val string_val ( ++ -- var func_name |
(18) | Cmd_c -> ε | ε |
(19) | Block -> Cmd Block | { ; return break continue while for if - ! bool_val int_val float_val string_val ( ++ -- var func_name | } |
(20) | Block -> ε | ε |
(21) | Ee -> E | - ! bool_val int_val float_val string_val ( ++ -- var func_name | ; ) |
(22) | Ee -> ε | ε |
(23) | E -> A E_c | bool_val int_val float_val string_val ( ++ -- var func_name | ; ) , |
(24) | E -> - A E_c | - |
(25) | E -> ! A E_c | ! |
(26) | E_c -> = A E_c | = | ; ) , |
(27) | E_c -> += A E_c | += |
(28) | E_c -> -= A E_c | -= |
(29) | E_c -> *= A E_c | *= |
(30) | E_c -> /= A E_c | /= |
(31) | E_c -> %= A E_c | %= |
(32) | E_c -> ε | ε |
(33) | A -> B A_c | bool_val int_val float_val string_val ( ++ -- var func_name | ; ) = += -= *= /= %= , |
(34) | A_c -> || B A_c | || | ; ) = += -= *= /= %= , |
(35) | A_c -> ε | ε |
(36) | B -> C B_c | bool_val int_val float_val string_val ( ++ -- var func_name | ; ) || = += -= *= /= %= , |
(37) | B_c -> && C B_c | && | ; ) || = += -= *= /= %= , |
(38) | B_c -> ε | ε |
(39) | C -> D C_c | bool_val int_val float_val string_val ( ++ -- var func_name | ; ) && || = += -= *= /= %= , |
(40) | C_c -> < D C_c | < | ; ) && || = += -= *= /= %= , |
(41) | C_c -> > D C_c | > |
(42) | C_c -> <= D C_c | <= |
(43) | C_c -> >= D C_c | >= |
(44) | C_c -> == D C_c | == |
(45) | C_c -> != D C_c | != |
(46) | C_c -> ε | ε |
(47) | D -> F D_c | bool_val int_val float_val string_val ( ++ -- var func_name | ; ) < > <= >= == != && || = += -= *= /= %= , |
(48) | D_c -> + F D_c | + | ; ) < > <= >= == != && || = += -= *= /= %= , |
(49) | D_c -> - F D_c | - |
(50) | D_c -> ε | ε |
(51) | F -> G F_c | bool_val int_val float_val string_val ( ++ -- var func_name | ; ) + - < > <= >= == != && || = += -= *= /= %= , |
(52) | F_c -> * G F_c | * | ; ) + - < > <= >= == != && || = += -= *= /= %= , |
(53) | F_c -> / G F_c | / |
(54) | F_c -> % G F_c | % |
(55) | F_c -> ε | ε |
(56) | G -> bool_val | bool_val | ; ) * / % + - < > <= >= == != && || = += -= *= /= %= , |
(57) | G -> int_val | int_val |
(58) | G -> float_val | float_val |
(59) | G -> string_val | string_val |
(60) | G -> ( E ) | ( |
(61) | G -> ++ var | ++ |
(62) | G -> -- var | -- |
(63) | G -> var G_c | var |
(64) | G -> func_name ( L ) | func_name |
(65) | G_c -> ++ | ++ | ; ) * / % + - < > <= >= == != && || = += -= *= /= %= , |
(66) | G_c -> -- | -- |
(67) | G_c -> ε | ε |
(68) | L -> E L_c | - ! bool_val int_val float_val string_val ( ++ -- var func_name | ) |
(69) | L -> ε | ε |
(70) | L_c -> , E L_c | , | ) |
(71) | L_c -> ε | ε |