Int: Int ast("int") Add: Add '+' Mul ast("add") | Mul Mul: Mul '*' Int ast("mul") | Int Add ast_print($1) #--- #1+2*3+4 #--- #add [start 1:1, end 1:8] # add [start 1:1, end 1:6] # int [start 1:1, end 1:2] => 1 # mul [start 1:3, end 1:6] # int [start 1:3, end 1:4] => 2 # int [start 1:5, end 1:6] => 3 # int [start 1:7, end 1:8] => 4