我正在设计一种特定于领域的小型语言。作为扫描器/解析器生成器,我使用Flex/Bisonc++。现在,生成的DSL编译器前端能够解析八进制、十进制和十六进制数字。唯一剩下的就是对C/C++中表示的浮点数(FPN)的支持。
在http://rosettacode.org/wiki/Literals/Floating_point#C上有一个浮点数语法的RegExp
a)我知道解析可以在扫描器或/和解析器中完成,但我不知道在性能和效率方面哪一个是最好的。
b)另一个约束是,我希望避免多次接触输入的每个字符,即我希望通过在解析过程中实现即时转换来避免使用STL或其他字符串到浮点数的转换函数。这有可能吗?
发布于 2012-01-11 15:59:39
让扫描器(flex代码)识别和转换浮点数是完全可行的,而且通常也是合理的,就像它应该识别和转换整数一样。如果您在语法(bison代码)而不是扫描器中编写了整数识别代码,那么您可能也在那里编写了浮点识别,但这不是通常的方式。您可能需要为令牌类型使用更复杂的(读作“复杂”)数据类型;请阅读%union。
https://stackoverflow.com/questions/8815587
复制相似问题