在哪里处理浮点数解析 - 扫描仪或解析器?

时间:2012-01-11 07:23:04

标签: parsing floating-point bison flex-lexer

我正在设计一个小的特定领域语言。 作为扫描仪/解析器生成器,我使用Flex / Bisonc ++。 现在,生成的DSL编译器前端能够解析八进制,十进制和十六进制数。 唯一剩下的就是支持C / C ++中标注的浮点数(FPN)。

浮点数语法有一个RegExp http://rosettacode.org/wiki/Literals/Floating_point#C

a)我知道解析可以在扫描仪或/和解析器中完成, 但我不知道什么是最好的 - 在性能和效率方面。

b)另外一个约束是,我想避免多次触摸输入的每个字符,即我想避免使用STL或其他字符串到浮点转换函数 通过在解析过程中实现即时转换。 这可能吗?

1 个答案:

答案 0 :(得分:2)

让扫描器(flex代码)识别并转换浮点数是完全可行的,而且通常是明智的,正如它应该识别并转换整数一样。如果您已经在语法(bison代码)而不是扫描仪中编写了整数识别代码,那么也许您也在那里编写浮点识别,但这不是通常的方式。您可能需要为令牌类型使用更复杂(读取“复杂”)的数据类型;阅读%union