internal structs + ugly written grammar + ast eval