Visualization of parser Calculator

Lexical analysis

_whitespace /^(\s+)/
name /^([a-z][a-z0-9_]*)/i
float /^([0-9]+\.[0-9]*)/
integer /^([0-9]+)/
op_add /^(\+)/
op_sub /^(-)/
op_mult /^(\*)/
op_div /^(\/)/
par_l /^(\()/
par_r /^(\))/
brace_l /^(\[)/
brace_r /^(\])/

Grammar

entry program = expr end
expr_add expr = expr op_add expr2
expr_sub expr = expr op_sub expr2
_expr_1_2 expr = expr2
expr_mult expr2 = expr2 op_mult expr3
expr_div expr2 = expr2 op_div expr3
_expr_2_3 expr2 = expr3
expr_neg expr3 = op_sub expr4
_expr_3_4 expr3 = expr4
_expr_par expr4 = par_l expr par_r
_expr_int expr4 = integer
_expr_float expr4 = float
expr_func expr4 = name par_l expr par_r
expr_var expr4 = name

LR Parser table

State end name float integer op_add op_sub op_mult op_div par_l par_r brace_l brace_r program expr expr2 expr3 expr4
0
entry program = expr end
expr_add expr = expr op_add expr2
expr_sub expr = expr op_sub expr2
_expr_1_2 expr = expr2
expr_mult expr2 = expr2 op_mult expr3
expr_div expr2 = expr2 op_div expr3
_expr_2_3 expr2 = expr3
expr_neg expr3 = op_sub expr4
_expr_3_4 expr3 = expr4
_expr_par expr4 = par_l expr par_r
_expr_int expr4 = integer
_expr_float expr4 = float
expr_func expr4 = name par_l expr par_r
expr_var expr4 = name
shift
1
shift
3
shift
4
shift
7
shift
5
goto
34
goto
10
goto
9
goto
6
1
expr_func expr4 = name par_l expr par_r
expr_var expr4 = name  
reduce
expr_var
reduce
expr_var
reduce
expr_var
reduce
expr_var
reduce
expr_var
shift
2
reduce
expr_var
2
expr_func expr4 = name par_l expr par_r
expr_add expr = expr op_add expr2
expr_sub expr = expr op_sub expr2
_expr_1_2 expr = expr2
expr_mult expr2 = expr2 op_mult expr3
expr_div expr2 = expr2 op_div expr3
_expr_2_3 expr2 = expr3
expr_neg expr3 = op_sub expr4
_expr_3_4 expr3 = expr4
_expr_par expr4 = par_l expr par_r
_expr_int expr4 = integer
_expr_float expr4 = float
expr_func expr4 = name par_l expr par_r
expr_var expr4 = name
shift
1
shift
3
shift
4
shift
7
shift
5
goto
25
goto
10
goto
9
goto
6
3
_expr_float expr4 = float  
reduce
_expr_float
reduce
_expr_float
reduce
_expr_float
reduce
_expr_float
reduce
_expr_float
reduce
_expr_float
4
_expr_int expr4 = integer  
reduce
_expr_int
reduce
_expr_int
reduce
_expr_int
reduce
_expr_int
reduce
_expr_int
reduce
_expr_int
5
_expr_par expr4 = par_l expr par_r
expr_add expr = expr op_add expr2
expr_sub expr = expr op_sub expr2
_expr_1_2 expr = expr2
expr_mult expr2 = expr2 op_mult expr3
expr_div expr2 = expr2 op_div expr3
_expr_2_3 expr2 = expr3
expr_neg expr3 = op_sub expr4
_expr_3_4 expr3 = expr4
_expr_par expr4 = par_l expr par_r
_expr_int expr4 = integer
_expr_float expr4 = float
expr_func expr4 = name par_l expr par_r
expr_var expr4 = name
shift
1
shift
3
shift
4
shift
7
shift
5
goto
15
goto
10
goto
9
goto
6
6
_expr_3_4 expr3 = expr4  
reduce
_expr_3_4
reduce
_expr_3_4
reduce
_expr_3_4
reduce
_expr_3_4
reduce
_expr_3_4
reduce
_expr_3_4
7
expr_neg expr3 = op_sub expr4
_expr_par expr4 = par_l expr par_r
_expr_int expr4 = integer
_expr_float expr4 = float
expr_func expr4 = name par_l expr par_r
expr_var expr4 = name
shift
1
shift
3
shift
4
shift
5
goto
8
8
expr_neg expr3 = op_sub expr4  
reduce
expr_neg
reduce
expr_neg
reduce
expr_neg
reduce
expr_neg
reduce
expr_neg
reduce
expr_neg
9
_expr_2_3 expr2 = expr3  
reduce
_expr_2_3
reduce
_expr_2_3
reduce
_expr_2_3
reduce
_expr_2_3
reduce
_expr_2_3
reduce
_expr_2_3
10
_expr_1_2 expr = expr2  
expr_mult expr2 = expr2 op_mult expr3
expr_div expr2 = expr2 op_div expr3
reduce
_expr_1_2
reduce
_expr_1_2
reduce
_expr_1_2
shift
13
shift
11
reduce
_expr_1_2
11
expr_div expr2 = expr2 op_div expr3
expr_neg expr3 = op_sub expr4
_expr_3_4 expr3 = expr4
_expr_par expr4 = par_l expr par_r
_expr_int expr4 = integer
_expr_float expr4 = float
expr_func expr4 = name par_l expr par_r
expr_var expr4 = name
shift
1
shift
3
shift
4
shift
7
shift
5
goto
12
goto
6
12
expr_div expr2 = expr2 op_div expr3  
reduce
expr_div
reduce
expr_div
reduce
expr_div
reduce
expr_div
reduce
expr_div
reduce
expr_div
13
expr_mult expr2 = expr2 op_mult expr3
expr_neg expr3 = op_sub expr4
_expr_3_4 expr3 = expr4
_expr_par expr4 = par_l expr par_r
_expr_int expr4 = integer
_expr_float expr4 = float
expr_func expr4 = name par_l expr par_r
expr_var expr4 = name
shift
1
shift
3
shift
4
shift
7
shift
5
goto
14
goto
6
14
expr_mult expr2 = expr2 op_mult expr3  
reduce
expr_mult
reduce
expr_mult
reduce
expr_mult
reduce
expr_mult
reduce
expr_mult
reduce
expr_mult
15
_expr_par expr4 = par_l expr par_r
expr_add expr = expr op_add expr2
expr_sub expr = expr op_sub expr2
shift
18
shift
16
shift
20
16
expr_sub expr = expr op_sub expr2
expr_mult expr2 = expr2 op_mult expr3
expr_div expr2 = expr2 op_div expr3
_expr_2_3 expr2 = expr3
expr_neg expr3 = op_sub expr4
_expr_3_4 expr3 = expr4
_expr_par expr4 = par_l expr par_r
_expr_int expr4 = integer
_expr_float expr4 = float
expr_func expr4 = name par_l expr par_r
expr_var expr4 = name
shift
1
shift
3
shift
4
shift
7
shift
5
goto
17
goto
9
goto
6
17
expr_sub expr = expr op_sub expr2  
expr_mult expr2 = expr2 op_mult expr3
expr_div expr2 = expr2 op_div expr3
reduce
expr_sub
reduce
expr_sub
reduce
expr_sub
shift
13
shift
11
reduce
expr_sub
18
expr_add expr = expr op_add expr2
expr_mult expr2 = expr2 op_mult expr3
expr_div expr2 = expr2 op_div expr3
_expr_2_3 expr2 = expr3
expr_neg expr3 = op_sub expr4
_expr_3_4 expr3 = expr4
_expr_par expr4 = par_l expr par_r
_expr_int expr4 = integer
_expr_float expr4 = float
expr_func expr4 = name par_l expr par_r
expr_var expr4 = name
shift
1
shift
3
shift
4
shift
7
shift
5
goto
19
goto
9
goto
6
19
expr_add expr = expr op_add expr2  
expr_mult expr2 = expr2 op_mult expr3
expr_div expr2 = expr2 op_div expr3
reduce
expr_add
reduce
expr_add
reduce
expr_add
shift
13
shift
11
reduce
expr_add
20
_expr_par expr4 = par_l expr par_r  
reduce
_expr_par
reduce
_expr_par
reduce
_expr_par
reduce
_expr_par
reduce
_expr_par
reduce
_expr_par
21
_expr_3_4 expr3 = expr4  
reduce
_expr_3_4
reduce
_expr_3_4
reduce
_expr_3_4
reduce
_expr_3_4
reduce
_expr_3_4
reduce
_expr_3_4
22
expr_neg expr3 = op_sub expr4
_expr_par expr4 = par_l expr par_r
_expr_int expr4 = integer
_expr_float expr4 = float
expr_func expr4 = name par_l expr par_r
expr_var expr4 = name
shift
1
shift
3
shift
4
shift
5
goto
8
23
_expr_2_3 expr2 = expr3  
reduce
_expr_2_3
reduce
_expr_2_3
reduce
_expr_2_3
reduce
_expr_2_3
reduce
_expr_2_3
reduce
_expr_2_3
24
_expr_1_2 expr = expr2  
expr_mult expr2 = expr2 op_mult expr3
expr_div expr2 = expr2 op_div expr3
reduce
_expr_1_2
reduce
_expr_1_2
reduce
_expr_1_2
shift
13
shift
11
reduce
_expr_1_2
25
expr_func expr4 = name par_l expr par_r
expr_add expr = expr op_add expr2
expr_sub expr = expr op_sub expr2
shift
18
shift
16
shift
26
26
expr_func expr4 = name par_l expr par_r  
reduce
expr_func
reduce
expr_func
reduce
expr_func
reduce
expr_func
reduce
expr_func
reduce
expr_func
27
_expr_float expr4 = float  
reduce
_expr_float
reduce
_expr_float
reduce
_expr_float
reduce
_expr_float
reduce
_expr_float
reduce
_expr_float
28
_expr_int expr4 = integer  
reduce
_expr_int
reduce
_expr_int
reduce
_expr_int
reduce
_expr_int
reduce
_expr_int
reduce
_expr_int
29
_expr_par expr4 = par_l expr par_r
expr_add expr = expr op_add expr2
expr_sub expr = expr op_sub expr2
_expr_1_2 expr = expr2
expr_mult expr2 = expr2 op_mult expr3
expr_div expr2 = expr2 op_div expr3
_expr_2_3 expr2 = expr3
expr_neg expr3 = op_sub expr4
_expr_3_4 expr3 = expr4
_expr_par expr4 = par_l expr par_r
_expr_int expr4 = integer
_expr_float expr4 = float
expr_func expr4 = name par_l expr par_r
expr_var expr4 = name
shift
1
shift
3
shift
4
shift
7
shift
5
goto
15
goto
10
goto
9
goto
6
30
_expr_3_4 expr3 = expr4  
reduce
_expr_3_4
reduce
_expr_3_4
reduce
_expr_3_4
reduce
_expr_3_4
reduce
_expr_3_4
reduce
_expr_3_4
31
expr_neg expr3 = op_sub expr4
_expr_par expr4 = par_l expr par_r
_expr_int expr4 = integer
_expr_float expr4 = float
expr_func expr4 = name par_l expr par_r
expr_var expr4 = name
shift
1
shift
3
shift
4
shift
5
goto
8
32
_expr_2_3 expr2 = expr3  
reduce
_expr_2_3
reduce
_expr_2_3
reduce
_expr_2_3
reduce
_expr_2_3
reduce
_expr_2_3
reduce
_expr_2_3
33
_expr_1_2 expr = expr2  
expr_mult expr2 = expr2 op_mult expr3
expr_div expr2 = expr2 op_div expr3
reduce
_expr_1_2
reduce
_expr_1_2
reduce
_expr_1_2
shift
13
shift
11
reduce
_expr_1_2
34
entry program = expr end
expr_add expr = expr op_add expr2
expr_sub expr = expr op_sub expr2
accept
shift
18
shift
16