在哪里处理浮点数的解析
我正在设计一个小领域特定语言的过程。 作为扫描器/解析器生成器,我使用Flex / Bisonc ++。 现在,生成的DSL编译器前端能够解析八进制,十进制和十六进制数字。 剩下的唯一东西就是在C / C ++中对浮点数(FPN)的支持。
http://rosettacode.org/wiki/Literals/Floating_point#C上有浮点数语法的RegExp
a)我知道解析可以在扫描器或解析器中完成,但我不知道什么是最好的 - 就性能和效率而言。
b)另外一个约束是,我想避免触及输入的每个字符不止一次,也就是说,我希望通过在解析过程中实现动态转换来避免使用STL或其他字符串到浮点转换函数处理。 那可能吗?
扫描器( flex
代码)识别并转换浮点数是完全可行的,并且通常是明智的,就像应该识别和转换整数一样。 如果你已经在文法( bison
代码)而不是扫描器中编写了整数识别代码,那么也许你在那里写了浮点识别代码,但这不是它通常的做法。 您可能需要为令牌类型使用更复杂的(读取“复杂”)数据类型; 阅读%union
。