简单的Flex程序

时间:2014-10-15 14:06:15

标签: c flex-lexer lex

给定一个字符串 - > #1温度是32CELSIUS

我应该打印输出 - > #1温度是64FAHRENHEIT

我知道这不是正确的转换,但这不是我想要将摄氏前面的值加倍并返回的重点。

#include<stdio.h>
%}
digit    [0-9]
celsius   "CELSIUS"
%%

{digit}+{celsius}        {printf("FAHRENHEIT");}


%%

int main(void)
{
  yylex();
  return 0;
}

这是我到目前为止的代码我有点迷失在如何转换数字,因为我不想转换任何数字,但只有世界前面的摄氏度。任何人都可以指导我

1 个答案:

答案 0 :(得分:2)

您发布的代码按预期为我工作。您需要做的就是在sscanf()作为第一个参数添加对printf()的调用(在调用yytext之前)。这样您就可以将整数存储在变量中,然后可以通过printf()调用将其翻倍并打印出来。

变化:

{digit}+{celsius}        {printf("FAHRENHEIT");}

要:

{digit}+{celsius}        { int x; sscanf(yytext,"%d",&x); printf("%dFAHRENHEIT",x*2);}

如果要匹配float而不是int,请将匹配规则更改为以下内容:

{digit}+.{digit}+{celsius}