我正在为一个带有'printf'操作码的机器编写模拟器,虽然我知道 Formatter 类可能已经足够好来实际格式化字符串,但我需要一种方法来计算 printf 调用消耗的参数数量。
就我个人而言,我可以通过正则表达式来计算 '%' 的数量,但我对格式化字符串不是很熟悉,所以可能无法正确计数(排除转义字符等)...
编辑:实际上,我需要参数的数量以及参数编号到参数类型的映射,因此,例如,“hello %s %+.3i”将给出 {0->String,1-> Integer}。
就我个人而言,我可以通过正则表达式来计算 '%' 的数量,但我对格式化字符串不是很熟悉,所以可能无法正确计数(排除转义字符等)...
编辑:实际上,我需要参数的数量以及参数编号到参数类型的映射,因此,例如,“hello %s %+.3i”将给出 {0->String,1-> Integer}。
%*s
或%*.*f
字符串,它们需要 2 或 3 个参数,因此你不能仅仅计算 %s 的数量) - Jason Sprintf()
编写一个(相对)简单的语法解析器,并使用抽象语法树来生成参数计数吗?这比一个简单的库调用更费力,但如果你有像 ANTLR 或其他工具来进行解析,我认为这并不难,而且你可以确保你的程序正常工作。我提出这个问题的唯一原因是完整的 printf 解析并不容易。如果你可以不使用可变宽度语法,那么这会使它变得简单很多,你可能可以用正则表达式来实现。 - Jason S