将字符串插值转换为C语言

时间:2016-01-26 07:06:34

标签: c ruby string compiler-construction

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

2 个答案:

答案 0 :(得分:3)

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

插值字符串

       "Hello #{name}!"

相当于

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

对更复杂的插值字符串的推广应该是显而易见的。

您可以在C中将其编译为等效的。您将需要一个特定于类型的toString操作的大型库来匹配您的语言中的类型。用户定义的类型很有趣。

您可以使用" sprintf"来实现此特殊情况,这是C" printf"的字符串构建版本。库函数,在插值表达式的类型与printf格式字符串可以处理的有限类型集匹配的情况下(例如,本机int和浮点数)。

答案 1 :(得分:0)

printf family会很好阅读,C库中的scanf系列函数也是如此。