FLEX / BISON - 如何将用户输入转换为小写?

时间:2012-04-26 15:41:29

标签: bison flex-lexer

如何在Flex中将用户输入转换为小写?看上线但没有找到任何帮助。

当我尝试这样做时:

yylval.string = strdup(tolower( yytext) ); 

我得到错误说明:传递'tolower'的arg 1会从指针中生成整数,而不会使用强制转换。

谢谢, 萨拉

2 个答案:

答案 0 :(得分:1)

%{
#include <stdio.h>
#include <ctype.h>
%}
%%
[A-Z]    putchar(tolower(*yytext));

如果要将整个字符串转换为小写,则需要在循环中调用tolower,因为tolower仅转换单个字符:

for (i = 0; yytext[i]; i++)
    yytext[i] = tolower(yytext[i]);
yylval.string = strdup(yytext);

答案 1 :(得分:0)

您可以重新定义顶部“C”部分中的YY_INPUT宏:

#define YY_INPUT(buf,result,max_size) \
        { \
        int c = '*', n; \
        for ( n = 0; n < max_size && \
                 (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
            buf[n] = (char) tolower(c); \
        if ( c == '\n' ) \
            buf[n++] = (char)  tolower(c); \
        if ( c == EOF && ferror( yyin ) ) \
            YY_FATAL_ERROR( "input in flex scanner failed" ); \
        result = n; \
        }