将字符串插值转换为 C

Translating String Interpolation to C

我正在使用我用 Java 编写的可直接编译成 C99 代码的编程语言。我想添加字符串插值功能,但不确定生成的 C 代码是什么。在 Ruby 中,您可以插入字符串:puts "Hello #{name}!" C 中的等价物是什么?

C 库中的 printf family would be good to read, as is the scanf 函数族。

所谓的内插字符串实际上只是伪装的表达式,由字符串内容的各个部分的字符串连接组成,交替的字符串文字片段与转换为字符串值的内插子表达式.

内插字符串

       "Hello #{name}!"

等同于

       concatenate(concatenate("Hello",toString(name)),"!")

更复杂的内插字符串的泛化应该是显而易见的。

您可以在 C 中将其编译为与此等效的版本。您将需要一个包含 type-specific toString 操作的大型库来匹配您的语言中的类型。用户定义的类型会很有趣。

您可以使用 "sprintf" 实现这种特殊情况,它是 C 的 "printf" 库函数的 string-building 版本,如果内插表达式的类型匹配 printf 格式字符串可以处理的有限类型集(例如,本机整数和浮点数)。