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