- naked variable names - single quoted strings - numbers are numbers - postfix? - english-y operators? LoadBalancerType 'internet-facing' eq LoadBalancerType defined or Maybe function calls for some of the kind of stuff we need in expressions? 'LoadBalancerType' parameter 'internet-facing' eq How do we differentiate between parameters and variables? Do we shove those all in one bucket? Should statements that reference parameters simply be evaluated as far as we can, then the remainder converted into a cfn condition+fn::if? Pass 1: - Load all files - Build dependency graph Pass 2: - Run through files in dependency graph - Run mergeFunctions + merge for each Pass 3: - Load all variables (does this need a dependency graph as well?) -- can grab these from the final document - Load all parameters (again, do we need a dependency graph?) -- can grab these from the final document - Evaluate variables + parameters Pass 3: - Run other functions (e.g., !var, !if, etc) So maybe pass 1: mergeFunctions merge Pass 2: