refactor EBNF; fix head recursion reducer; add expression test case