+def transform_string_literal(accumulators, expression):
+ value = expression.value
+
+ try:
+ index = accumulators.string_literal_list.index(value)
+ except ValueError:
+ index = len(accumulators.string_literal_list)
+ accumulators.string_literal_list.append(value)
+
+ return CStringLiteral(index=index, value=value)
+
+def transform_symbol_expression(accumulators, expression):
+ if expression.value in ['true', 'false']:
+ return CConstantExpression(value=expression.value)
+
+ if expression.value not in accumulators.symbol_list:
+ symbol_list.append(expression.value)
+
+ return CSymbolExpression(
+ symbol=expression.value,
+ symbol_list_index=accumulators.symbol_list.index(expression.value),
+ )
+