http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html