implement recursive expression syntax