add underscore support in expression, add visitor interface and
restructure